我刚写了一些代码,它应该遍历文件的每一行,并且如果该行的第一个单词之后的数字是1,则应该调用另一个函数。
文件如下所示:
Button0 1
Button1 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语句
已经感谢帮助了。
答案 0 :(得分:1)
您需要考虑一个新的换行符。如果打印整个pos变量,您将看到以下输出:
['Button0', '1\n']
['Button1', '0\n']
['Motion', '0\n']
['Order', '0']
您的解决方案可能是考虑换行符(在拆分&#34之前将其删除;")或使用.split()字符串函数。使用不带分隔符的split()也会考虑连续的和尾随的空格字符。 Python docs解释得非常好。
str.split(sep = None,maxsplit = -1)返回中的单词列表 string,使用sep作为分隔符字符串。如果给出maxsplit,at 大多数maxsplit分裂已完成(因此,列表最多将有 maxsplit + 1个元素)。如果没有指定maxsplit或-1,那么那里 对分割数量没有限制(所有可能的分割都是如此)。
如果给出了sep,则连续的分隔符不会组合在一起 被视为划分空字符串(例如,' 1,,2' .split(',') 返回[' 1',''' 2'])。 sep参数可能包含多个 字符(例如,' 1<> 2<>' .split('<>')返回[' 1',&# 39; 2&#39 ;, ' 3'])。返回使用指定分隔符拆分空字符串 ['&#39]。
例如:
' 1,2,3' .split(',')[' 1',' 2',&#39 ; 3'] ' 1,2,3' .split(',',maxsplit = 1)[' 1',' 2,3'] ' 1,2,,3,' .split(',')[' 1',' 2',' ;',' 3','']
如果未指定sep或为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 :(得分:0)
看起来它也是第二个字符串中的行尾字符。从输出看来它似乎是印刷" 1 \ n \ n"有效。 Python的print语句会自动添加一个返回值,因此它打印的字符串必须包含另一个。
我看到了两个简单的问题解决方案:
if (not int(pos[1]))
此选项将输入字符串解析为整数,并且Python解释任何不是' 0',' NULL'或""如果为假,我们可以将其反转并获得0的真值。
if (pos[1][0] == "0")
由于你的比较字符串在结尾处有返回字符,因此它不等于0.如果你只是抓住字符串的第一个字符,你应该只能得到" 0&#34 ;并能够按照你想要的方式进行比较。