在列表 1 中搜索单词,并从列表 2 中删除匹配的单词



我有两个长列表,其中包含txt.文件中的单词。其中之一是带有句子的行。如果在句子之一中找到第二列表中的单词,我需要将其删除。

滴定.txt:

Samsung SM-G960F S9
Samsung SM-G950F S8
Iphone A1906 8
Samsung SM-G940F S7

删除.txt(要删除的"单词"(:

SM-G960F
SM-G950F
A1906
SM-G940F
A1904
SM-G930F

New_Titels.txt(它需要看起来像什么样子(:

Samsung S9
Samsung S8
Iphone 8
Samsung S7

我尝试了这段代码,但似乎输出了与以前相同的数据。

infile = "C:/Users/user1/Desktop/Titels.txt"
delfile = "C:/Users/user1/Desktop/Remove.txt"
outfile = "C:/Users/user1/Desktop/New_Titels.txt"
fdel = open(delfile)
fin = open(infile)
fout = open(outfile, "w+")
for line in fin:
for word in fdel:
line = line.replace(word, "")
fout.write(line)
fin.close()
fout.close()

delfile的 for 循环将被多次调用,因此您需要多次读取此文件。问题是第一次读取文件后,您需要重置它才能再次读取它。要重置它,请使用f.seek(0)重新定位到文件的开头,或者关闭它,然后再次打开它,这将从文件的开头开始。或者,您可以使用with open(filename),它将在每次读取文件时自动关闭文件。此外,使用word.strip()从每行末尾删除换行符

for line in fin:
with open(delfile) as words:
for word in words:
line = line.replace(word.strip(), "")
fout.write(line)

正如我在评论中所说,有两个问题,word上面有一行新行,并且fdel文件正在迭代两次,请尝试一次阅读单词

foo = open('foo')
bar = open('bar').readlines()
for line in foo:
for word in bar:
line = line.replace(word.strip(), '')
print(line.strip())

您也可以使用with打开多个文件,它们将被关闭 当with块完成时

with open('foo') as fin, open('bar') as bar:
...

这将避免忘记呼叫关闭

相关内容

  • 没有找到相关文章

最新更新