我正在处理一个python程序,它打印从命令行输入的最后一个文件中的单词。这些词不能出现在任何前面的文件中。例如,如果我从命令行输入2个文件和
文件1包含:"我们很棒"和文件2(输入的最后一个文件)包含:"我们真的很棒"
我的最终列表应该只包含:"真的"
现在我的代码设置为只查看输入的最后一个文件,如何查看所有前面的文件并在我尝试的内容中进行比较?这是我的代码:
更新
import re
import sys
def get_words(filename):
test_file = open(filename).read()
lower_split = test_file.lower()
new_split = re.split("[^a-z']+", lower_split)
really_new_split = sorted(set(new_split))
return really_new_split
if __name__ == '__main__':
bag = []
for filename in sys.argv[1:]:
bag.append(get_words(filename))
unique_words = bag[-1].copy()
for other in bag[:-1]:
unique_words -= other
for word in unique_words:
print(word)
此外:
>>> set([1,2,3])
{1, 2, 3}
答案 0 :(得分:1)
确实没有太多缺失:第1步将代码放入函数中,以便重用它。您正在做同样的事情(解析文本文件)几次,所以为什么不将相应的代码放在可重用的单元中。
def get_words(filename):
test_file = open(filename).read()
lower_split = test_file.lower()
new_split = re.split("[^a-z']+", lower_split)
return set(new_split)
步骤2:设置循环以调用您的函数。在这个特殊情况下,我们可以使用列表理解,但对于一个新手而言,这可能太过分了。你会在适当的时候来到这里:
bag = []
for filename in sys.argv[x:] # you'll have to experiment what to put
# for x it will be at least one because
# the first argument is the name of your
# program
bag.append(get_words(filename))
现在您可以方便地按文件分组所有单词。正如我所说,你可以简单地采取设定差异。因此,如果您想要在最后一个文件中只包含 的所有单词:
unique_words = bag[-1].copy()
for other in bag[:-1]: loop over all the other files
unique_words -= other
for word in unique_words:
print(word)
我没有测试它,所以让我知道它是否运行。
答案 1 :(得分:0)
考虑使用Set的差异操作进行简化,以减去'文件中的单词集。
import re
s1 = open('file1.txt', 'r').read()
s2 = open('file2.txt', 'r').read()
set(re.findall(r'\w+',s2.lower())) - set(re.findall(r'\w+',s1.lower()))
结果:
{'really'}