Python 使用列表中的字符串值的布尔表达式出现问题
我有以下问题:Python 使用列表中的字符串值的布尔表达式出现问题,python,Python,我有以下问题: # line is a line from a file that contains ["baa","beee","0"] line = TcsLine.split(",") NumPFCs = eval(line[2]) if NumPFCs==0: print line 如果列表的第二个位置的值==0,我想打印文件中的所有行 我打印行,但之后会发生以下情况: 回溯(最近一次呼叫最后一次): ['baaa','beee','0','\n'] 但在我出
# line is a line from a file that contains ["baa","beee","0"]
line = TcsLine.split(",")
NumPFCs = eval(line[2])
if NumPFCs==0:
print line
如果列表的第二个位置的值==0,我想打印文件中的所有行
我打印行,但之后会发生以下情况:
回溯(最近一次呼叫最后一次):
['baaa','beee','0','\n']
但在我出现下一个错误之后
ilation.py”,第141行,在?
getZeroPFcs()
ilation.py”,第110行,在getZeroPFcs中
NumPFCs=eval(第[2]行)
文件“”,第0行
你能帮帮我吗?
谢谢
你的问题有点难理解,但是使用eval肯定不是一个好主意。只需执行直接字符串比较:
line=TcsLine.split(",")
if line[2] == "0":
print line
或者使用int
line=TcsLine.split(",")
if int(line[2]) == 0:
print line
不管怎样,你的坏数据都会让你失望
我也推荐阅读。你的问题有点难读,但使用eval肯定不是一个好主意。只需执行直接字符串比较:
line=TcsLine.split(",")
if line[2] == "0":
print line
或者使用int
line=TcsLine.split(",")
if int(line[2]) == 0:
print line
不管怎样,你的坏数据都会让你失望
我还要重新编译阅读。我在您的代码段中看到了一些问题:
line=TcsLine.split(",")
if len(line) >=3 and line[2].rfind("0") != -1:
print line
我在您的代码段中看到了一些问题:
line=TcsLine.split(",")
if len(line) >=3 and line[2].rfind("0") != -1:
print line
我建议使用正则表达式捕获指定0的所有变量:双引号、不带任何引号、单引号、引号外有额外空格、引号内有空格、希望如何处理方括号、,等等。我建议使用正则表达式来捕获指定0的所有变体:双引号、不带引号、单引号、引号外有额外空格、引号内有空格、希望如何处理方括号等等。让我解释一下您在这里做的事情 如果你写:
NumPFCs = eval(line[2])
评估的顺序是:
- 取字符串行的第二个字符,即引号''
- 将此引号作为python表达式求值,这是一个错误
NumPFCs = eval(line)[2]
那么评估的顺序是:
- 求值该行,生成python列表
- 以该列表的第二个元素为例,它是一个单字符字符串:“0”
- 字符串不能与数字进行比较;这也是一个错误
NumPFCs = eval(eval(line)[2])
或者,稍微好一点,将NUMPFC与字符串进行比较:
if NumPFCs == "0":
但是,这种错误的方式几乎是数不胜数的。你应该忘记
eval
,尝试使用其他方法:字符串拆分、正则表达式等。其他人已经提供了一些建议,我相信还会有更多的建议。让我解释一下你在这里做什么
如果你写:
NumPFCs = eval(line[2])
评估的顺序是:
- 取字符串行的第二个字符,即引号''
- 将此引号作为python表达式求值,这是一个错误
NumPFCs = eval(line)[2]
那么评估的顺序是:
- 求值该行,生成python列表
- 以该列表的第二个元素为例,它是一个单字符字符串:“0”
- 字符串不能与数字进行比较;这也是一个错误
NumPFCs = eval(eval(line)[2])
或者,稍微好一点,将NUMPFC与字符串进行比较:
if NumPFCs == "0":
但这可能会出错的方式几乎数不胜数。你应该忘记
eval
,尝试使用其他方法:字符串拆分、正则表达式等。其他人已经提供了一些建议,我相信还会有更多的建议。给猫剥皮的方法有很多,可以说:)
但在我们开始之前,不要对非您的字符串使用eval,因此如果该字符串曾经离开过您的程序;i、 它保存在一个文件中,通过网络发送,有人可以发送一些令人讨厌的东西。如果有人能,你可以肯定有人会的
您可能需要查看您的数据格式。在文件中放置像[“baa”、“beee”、“0”、“\n”]这样的字符串对我来说没有多大意义
第一种也是最简单的方法是去掉不需要的东西,然后进行字符串比较。只要“0”-字符串看起来总是一样的,并且您不是真正追求整数值0,只有字符模式:
TcsLine = '["baa","beee","0"]'
line = TcsLine.strip('[]').split(",")
if line[2] == '"0"':
print line
第二种方法与第一种方法类似,不同之处在于我们将数字字符串转换为整数,生成您要查找的整数值(但打印“line”时不带所有引号):
是否该字符串实际上是一个json数组?如果运行Python=2.6,我可能会正确地解析它。然后将结果“0”字符串强制转换为整数,如前一示例所示
TcsLine = '["baa","beee","0"]'
#import json # for >= Python2.6
import simplejson as json # for <Python2.6
line = json.loads(TcsLine)
NumPFCs = int(line[2])
if NumPFCs==0:
print line
TcsLine='[“baa”、“beee”、“0”]
#为>=Python2.6导入json
将simplejson作为json导入#对于来说,给猫剥皮的方法有很多,可以这样说:)
但在我们开始之前,不要对非您的字符串使用eval,因此如果该字符串曾经离开过您的程序;i、 它保存在一个文件中,通过网络发送,有人可以发送一些令人讨厌的东西。如果有人能,你可以肯定有人会的
您可能需要查看您的数据格式。在文件中放置像[“baa”、“beee”、“0”、“\n”]这样的字符串对我来说没有多大意义
第一种也是最简单的方法是去掉不需要的东西,然后进行字符串比较。这会有用的