我正在尝试打印文本文件中包含列表中任何单词的所有行,名为“names”。我遇到的问题是我的程序迭代太多,因为多次迭代,重复的行被打印出来。如何只打印一次线路?另外如何将行打印到输出文件?
这是我到目前为止所做的:
names=[bob,carter,jim,mike]
with open("base.txt") as openfile:
for line in openfile:
for part in line.split():
for i in names:
if i in part:
print line
答案 0 :(得分:0)
无需分割线条,只需检查整个线条是否包含该名称。此外,无需检查每个名字,第一场比赛即可。 any
可以帮助您避免一些颠簸的代码:
with open("base.txt") as openfile:
for line in openfile:
if any(name in line for name in names):
print line
答案 1 :(得分:0)
检查一次所有名称并使用any()
,如下所示。
names=['bob','carter','jim','mike']
with open("base.txt") as openfile:
for line in openfile:
if any([n in line for n in names]):
print line.strip()
[n in line for n in names]
做的是检查行中的每个名称并返回布尔列表。 any()
检查列表中的任何元素是否为True
。
答案 2 :(得分:0)
正如其他人已发布的那样,您可以使用any
来确认该行中至少有一个名称的出现。使用列表推导将所有匹配的行放入列表中:
with open("base.txt") as openfile, open("output.txt", "w") as outputfile:
result = [line if any(n in line for n in names) for line in openfile]
outputfile.writelines(result) # wwii's comment: the lines already contain a separator
要将result
写入outputfile
,您应该使用writelines
方法,该方法将result
序列作为参数(@ wwii的注释)。