我正在尝试编写一个通用代码来对任意数量的输入文件执行set操作。
通常对于任何设置操作(我已经限制了输入文件的数量),我使用类似的东西。
my_set1 = set(map(str.strip, open('filename1.txt')))
my_set2 = set(map(str.strip, open('filename2.txt')))
common = myset1.intersection(my_set2)
每个文件只有一列。
现在我的目标是将所有集理论函数放入其中。像。的东西。
python set.py -i file1,file2,file3,file4 -o inter
这些输入来自用户。
实际上,用户可以定义输入文件的数量和他想要的操作类型。
如果你们中的任何人都可以告诉我如何做到这一点,我可以自己写其他操作,比如工会和差异
答案 0 :(得分:2)
set.intersection()
和set.update_intersection()
方法采用任何可迭代的方式,而不仅仅是集合。
由于您只对最终产品(文件之间的交集)感兴趣,因此最好在此使用set.intersection_update()
。
从一组开始,然后继续使用其余文件更新它:
with open(files[0]) as infh:
myset = set(map(str.strip, infh))
for filename in files[1:]:
with open(filename) as infh:
myset.intersection_update(map(str.strip, infh))
您可以根据命令行开关使用方法动态:
ops = {'inter': set.intersection_update,
'union': set.update,
'diff': set.difference_update}
with open(files[0]) as infh:
myset = set(map(str.strip, infh))
for filename in files[1:]:
with open(filename) as infh:
ops[operation](myset, map(str.strip, infh))