Python 多文件输入

Python multiple file input

我正在开发一个 python 程序,该程序打印从命令行输入的最后一个文件中的单词。这些词不能出现在前面的任何文件中。因此,例如,如果我从命令行输入 2 个文件并且

文件 1 包含:"We are awesome",文件 2(最后输入的文件)包含:"We are really awesome"

我的最终列表应该只包含:"really"

现在我的代码设置为只查看最后输入的文件,我如何查看前面的所有文件并在我尝试执行的上下文中比较它们?这是我的代码:

更新

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}

真的没有太多遗漏:第 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)

我没有测试它,所以让我知道它是否运行。

考虑使用 Set 的差分运算简化为 'subtract' 文件中的单词集。

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'}