我有多个文件(比如3)。 每个文件只有一列。如下所示:
文件 A
America
Russia
China
UK
文件 B
India
China
Russia
文件 C
China
America
Russia
Iran
现在,为了计算交集或说要获取所有文件中的公共元素,我这样做
python -c 'import sys;print "".join(sorted(set.intersection(*[set(open(a).readlines()) for a in sys.argv[1:]])))' File1 File2 File3 File4
但是,如果我还需要知道这些文件之间的成对重叠,我该如何循环该过程?以便我得到一组存在于所有这些元素中的元素,以及A&B,A&C,C&B中存在的元素。
Python的帮助将不胜感激。
请帮忙
要获取所有文件通用的行,您可以使用:
for f in sys.argv[1:]:
data = []
with open(f) as inp:
lines = set(line.rstrip() for line in inp)
data.append(lines)
common_lines = data[0].intersection(*data[1:])
对于第二部分,请使用 itertools.combs:
from itertools import combinations
for f1, f2 in combinations(sys.argv[1:], 2):
with open(f1) as inp1, open(f2) as inp2:
print set(line.rstrip() for line in inp1).intersection(map(str.rstrip,
inp2))
您可以简单地使用set
:
>>> print list(set(open(f1)) & set(open(f2)) & set(open(f3)))
对于特定文件,您可以执行以下操作:
>>> print list(set(open(f1)) & set(open(f2)))
>>> print list(set(open(f1)) & set(open(f3)))
>>> print list(set(open(f2)) & set(open(f3)))
根据@HerrActress的建议,这将处理字符串的n
部分:
[i.strip() for i in (set(open(f1)) & set(open(f2)))]