[英]Python3 For-Loop and If-Statement trouble
我只是编写了一些代码,该代码应该遍历文件的每一行,并且如果该行的第一个单词后面的数字为1,则应调用另一个函数。
该文件如下所示:
按钮0 1
按钮1 0
运动0
订单0
我的代码:
currLog = open(log,"r") #Open current Log-File
for line in currLog: #Loop through each Line
pos = line.split(" ") #Split line into Name(pos0) and Answer(pos1)
print(pos[1])
if (pos[1] == "0"):
print("Button0")
壳牌输出继电器:
1
0
0
0
Button0
就像您看到的那样,它仅在最后一行输入if语句
已经感谢您的帮助。
您有一个新的换行符,您需要考虑。 如果打印整个pos变量,将看到以下输出:
['Button0', '1\n']
['Button1', '0\n']
['Motion', '0\n']
['Order', '0']
您的解决方案要么是考虑换行符(在分割“”之前将其删除),要么使用.split()字符串函数。 使用不带分隔符的split()还将说明连续的和尾随的空白字符。 Python文档对此进行了很好的解释。
str.split(sep = None,maxsplit = -1)返回字符串中的单词列表,使用sep作为分隔符字符串。 如果指定了maxsplit,则最多完成maxsplit个分割(因此,列表最多包含maxsplit + 1个元素)。 如果未指定maxsplit或-1,则分割数没有限制(进行所有可能的分割)。
如果给定sep,则不将连续的定界符分组在一起,而是将其视为定界空字符串(例如'1,,2'.split(',')返回['1','','2'])。 sep参数可以包含多个字符(例如,'1 <> 2 <> 3'.split('<>')返回['1','2','3'])。 使用指定的分隔符分割空字符串将返回['']。
例如:
'1,2,3'.split(',')['1','2','3']'1,2,3'.split(',',maxsplit = 1)['1', '2,3']'1,2,,3,'。split(',')['1','2','','3','']
如果未指定sep或为None,则将应用不同的拆分算法:连续的空白行将被视为单个分隔符,并且如果字符串的开头或结尾处有空格,则结果在开头或结尾将不包含空字符串。 因此,使用None分隔符拆分空字符串或仅包含空格的字符串将返回[]。
例如:
'1 2 3'.split()['1','2','3']'1 2 3'.split(maxsplit = 1)['1','2 3']'1 2 3'。 split()['1','2','3']
看起来它也在第二个字符串中获取行尾字符。 从输出看来,它正在有效地打印“ 1 \\ n \\ n”。 Python的print语句会自动添加一个返回值,因此它正在打印的字符串必须包含另一个返回值。
我看到了两个简单的解决方案来解决您的问题:
if (not int(pos[1]))
此选项将输入字符串解析为整数,并且Python将非'0','NULL'或“”解释为false时,我们可以将其取反并获得0的真值。
if (pos[1][0] == "0")
由于您要比较的字符串的末尾有返回字符,因此它不等于0。如果您只是抓住字符串的第一个字符,则应该只能得到“ 0”,并能够以自己的方式进行比较想要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.