Python多文件输入

时间:2017-02-16 19:08:08

标签: python command-line file-handling

我正在处理一个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}

2 个答案:

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