我有两个长列表,其中包含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:
...
这将避免忘记呼叫关闭