将Python变量区分为str或int
我有一个文件,每行有3个值。这是一个相当随机的文件,这些值中的任何一个都可以是str或int将Python变量区分为str或int,python,string,int,Python,String,Int,我有一个文件,每行有3个值。这是一个相当随机的文件,这些值中的任何一个都可以是str或int George, 34s, Nikon 42, absent, Alan apple, 111, 41 marked, 15, never ... 因此,我在行中读取,并使用split获得第一个值: theFile = r"C:\... " tDC = open(theFile, "r") for theLine in tDC: a, b, c = theLine.spli
George, 34s, Nikon
42, absent, Alan
apple, 111, 41
marked, 15, never
...
因此,我在行中读取,并使用split获得第一个值:
theFile = r"C:\... "
tDC = open(theFile, "r")
for theLine in tDC:
a, b, c = theLine.split(',')
到目前为止还不错
当我试图处理变量a
时,我陷入了困境。如果它是str或int,我需要以不同的方式处理它。我尝试设置a=int(a)
,但如果它是字符串(例如,“George”),则会出现错误。我尝试了如果type(a)=int
或如果isinstance(a,int)
,但都不起作用,因为所有值都以字符串形式输入
那么,我如何评估该值而不查看其指定的“类型”?具体来说,我想读取所有的a
,并找到所有数字的最大值(它们是整数,但可能是大的——可能是六位数)
有没有一种方法可以读取行中的数字,使数字以数字形式输入,字符串以字符串形式输入,或者有没有一种方法可以在不查看类型的情况下计算值本身?第一点是,您需要一些规则来告诉您哪些值是整数,哪些值不是整数。在一个包含像
32s
这样的数据集中,我不确定把任何可能是整数的东西都当作整数来对待是否有意义
但是,为了简单起见,让我们假设这是您想要的规则:任何可能是整数的都是。所以,int(a)
已经非常接近了;唯一的问题是它可能会失败。你用它做什么
Python的设计宗旨是:请求原谅比请求允许更容易。尝试一些东西,然后处理它可能失败的事实。正如建议的那样,使用try
语句:
try:
intvalue = int(a)
except ValueError:
# Oops, it wasn't an int, and that's fine
pass
else:
# It was an int, and now we have the int value
maxvalue = max(maxvalue, intvalue)
第一点是,您需要一些规则来告诉您哪些值是整数,哪些值不是整数。在一个包含像
32s
这样的数据集中,我不确定把任何可能是整数的东西都当作整数来对待是否有意义
但是,为了简单起见,让我们假设这是您想要的规则:任何可能是整数的都是。所以,int(a)
已经非常接近了;唯一的问题是它可能会失败。你用它做什么
Python的设计宗旨是:请求原谅比请求允许更容易。尝试一些东西,然后处理它可能失败的事实。正如建议的那样,使用try
语句:
try:
intvalue = int(a)
except ValueError:
# Oops, it wasn't an int, and that's fine
pass
else:
# It was an int, and now we have the int value
maxvalue = max(maxvalue, intvalue)
如果字符串中的所有字符都在字母表中,则isalpha()返回“True”
如果字符串中的所有字符都是数字,则isnumeric()返回“True”
所以,
很抱歉,我的回答很简单,我只是为了同一个问题来到这里,我找到了一种不同的方式,希望与您分享isalpha()如果字符串中的所有字符都在字母表中,则返回“True”
如果字符串中的所有字符都是数字,则isnumeric()返回“True”
所以,
很抱歉我的回答,我只是为了同一个问题来到这里,我找到了一种不同的方式,希望与您分享以下内容:
def ret_var(my_var: int) -> int:
try:
intvalue = int(my_var)
return my_var
except ValueError:
print("my_var not int!")
这:
您可以使用
try
/except
块,使用except
中的ValueError
。如何知道某列42
是表示int42
还是表示字符串“42”
?毕竟,具有字符串值的数据,如<代码> 32秒> <代码>也可能有字符串值,如<代码> 42”<代码>。作为一个旁注,您可能需要考虑使用<代码> CSV < /代码>库,而不是手动调用<代码>拆分< /代码>。我不知道您的数据来自何处,也不知道它们是什么意思,但如果您遇到一个像“Smith,John”
这样的专栏,我也不会太惊讶,您的代码会将其视为两个专栏,而不是一个,这将很难修复,而使用csv
它要么就可以工作,如果type(a)=int不测试是否相等,则只需设置一个方言参数来修复它。要测试相等性,请使用==(双相等)。单个=用于赋值。您可以使用try
/except
块,使用except
中的ValueError
。如何知道某列42
是表示int42
还是表示字符串“42”
?毕竟,具有字符串值的数据,如<代码> 32秒> <代码>也可能有字符串值,如<代码> 42”<代码>。作为一个旁注,您可能需要考虑使用<代码> CSV < /代码>库,而不是手动调用<代码>拆分< /代码>。我不知道您的数据来自何处,也不知道它们是什么意思,但如果您遇到一个像“Smith,John”
这样的专栏,我也不会太惊讶,您的代码会将其视为两个专栏,而不是一个,这将很难修复,而使用csv
它要么就可以工作,如果type(a)=int不测试是否相等,则只需设置一个方言参数来修复它。要测试相等性,请使用==(双相等)。单个=用于赋值。@padraiccnningham:如果“这些值中的任何一个都可以是str或int,float(A)
似乎不是个好主意。当然,如果想要的规则是“任何可以解释为浮点的东西都应该被解析为浮点,然后被截断”(或四舍五入或其他什么),那就不同了,但这似乎比“任何可以解释为int的东西都应该被解析为int”的可能性要小得多将引发ValueError
并被跳过。“34s”也是如此,我们知道这是他的输入。因此,“2+3*4”
,“0xcab”
,“两个”
和“0”
和“4/1”
,以及其他各种可以被视为整数表示的东西。如果您不明白整数浮点如何影响和,请在将所有内容转换为浮点后,尝试添加123456789012134567890+1+-123456789012134567890
。@PadraicCunningham:谁在乎cuto有多大
def ret_var(my_var: int) -> int:
try:
intvalue = int(my_var)
return my_var
except ValueError:
print("my_var not int!")