让我们从输入文件名开始:
files = ('raz.txt','dwa.txt')
还有一些辅助功能。这是一个从文件中读取所有单词的生成器,
def read(filename):
with open(filename) as f:
for line in f:
if len(line)>0:
yield line.strip()
这会将一个序列写入文件。
def write(filename, lines):
with open(filename, 'w') as f:
f.write('\n'.join(lines))
所以让我们创建两个生成器 - 每个输入文件一个
words = [read(filename) for filename in files]
然后,让我们将生成器列表转换为集合列表
wordSets = map(set, words)
现在我们有一个包含 2 个集合的列表,其中仅包含每个文件中的唯一单词。
让我们通过相交它们的集合来创建另一个包含所有输入文件中存在的单词的集合:
commonWords = set.intersection(*wordSets)
以及重写的时间。
for filename in files:
由于我们想保存到完全相同的文件,不幸的是,我们需要先将其全部内容读入内存,然后再从那里写入。(如果您希望在不同文件中输出,则不必缓冲文件。
让我们创建一个阅读器生成器,然后通过包装将其全部读取到内存中list()
:
lines = list(read(filename))
然后按顺序将单词写回给定文件,但前提是它们不在 commonWords
write(filename, (word for word in lines if word not in commonWords))
输入:
raz.txt
gedit
google chrome
git
vim
foo
bar
dwa.txt
firefox
svn
foo
vim
输出:
raz.txt
gedit
google chrome
git
bar
dwa.txt
firefox
svn
重复从两者中删除。