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'}
我正在开发一个 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'}