我在invalid_change变量中有一个id,我试图从输入文件“list.txt”中删除它,并创建一个文件results.txt,如下所示。任何人都可以提供有关如何修复的输入?我有一个样本输入和预期输出低于..
'''
INPUT(list.txt:-
350882 348521 350166
346917 352470
360049
EXPECTEDOUTPUT(results.txt):-
350882 348521 350166
346917
360049
'''
invalid_list=['352470','12345']
f_write = open('results.txt', 'wb')
with open('list.txt','r') as f :
for line in f :
#delete the whole line if any invalid gerrit is presnet
gerrit_list = line.strip().split(' ')
ifvalid = True
for gerrit in gerrit_list:
try: # check if invalid gerrit is present
invalid_gerrit.index(invalid_change)
ifvalid = False
break
except:
pass
if ifvalid:
f_write.write(line)
f_write.close()
答案 0 :(得分:0)
问题是当你到达这一行时:
346917 352470
ifvalid
变量设置为False
,因此不会将此特定行(即使已调整)写入输出文件。
可能的解决方案:
如果您有任何疑问,请告诉我们。
代码中的其他问题包括:
NameError
,而您应该只捕获ValueError
,或者更确切地说执行包含in
关键字的测试) - 这就是您的原因没有看到与缺少invalid_change
和invalid_gerrit
变量相关的错误,f_write
,您也可以在已经使用的with
语句中使用它,如果你有Python 2.7+或3.1 +,str.split()
默认按空格拆分,并从结果中删除空字符串,因此您只需编写line.strip().split(' ')
,而不是写line.split()
,答案 1 :(得分:0)
gerrit_list中的每个项目都是一个单独的数字。您无需查找数字中是否包含无效更改。事实上,这可能会导致错误。您可以直接遍历gerrit_list中的项目并丢弃与invalid_list匹配的项目:
for line in f:
gerrit_list = line.split()
valid_gerrits = [gerrit for gerrit in gerrit_list if gerrit not in invalid_list]
if valid_gerrits:
newline = ' '.join(valid_gerrits) + '\n'
f_write.write(newline)