繁体   English   中英

Python3 For-Loop和If-Statement问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM