DIFF和交叉的两个文本文件的报告(Diff and intersection reporting

2019-09-01 10:08发布

免责声明:我是新来的一般程序和脚本,所以请原谅缺乏技术术语

所以我有一个包含列名的两个文本文件中的数据集:

First File | Second File
bob        | bob
mark       | mark
larry      | bruce
tom        | tom

我想运行一个脚本(PREF蟒),在一个文本文件中的交叉线和不同的线在另一个文本文件输出,例如:

matches.txt:

bob 
mark 
tom 

differences.txt:

bruce

我将如何使用Python做到这一点? 或使用Unix命令行,如果这是很容易?

Answer 1:

words1 = set(open("some1.txt").read().split())
words2 = set(open("some2.txt").read().split())

duplicates  = words1.intersection(words2)
uniques = words1.difference(words2).union(words2.difference(words1))

print "Duplicates(%d):%s"%(len(duplicates),duplicates)
print "\nUniques(%d):%s"%(len(uniques),uniques)

类似的东西,至少



Answer 2:

排序| uniq的是好的,但可能COMM甚至更好。 “人通讯”的详细信息。

从手册页:

EXAMPLES
       comm -12 file1 file2
              Print only lines present in both file1 and file2.

       comm -3 file1 file2
              Print lines in file1 not in file2, and vice versa.

你也可以使用Python的集合类型,但通讯更加容易。



Answer 3:

Unix外壳解决方案为:

# duplicate lines
sort text1.txt text2.txt | uniq -d

# unique lines
sort text1.txt text2.txt | uniq -u


Answer 4:

Python字典是O(1)或非常接近,换句话说,他们是非常快的(但他们会使用大量内存,如果你索引文件比较大)。 所以在第一个文件阅读并构建一个字典是这样的:

left = [x.strip() for x in open('left.txt').readlines()]

该列表理解和钢带()是必需的,因为readlines方法你手中有尾随换行符线完好无损。 这将创建文件中的所有项目的列表,假设每行一个(使用.split如果他们都在同一行)。

现在建的字典:

ldi = dict.fromkeys(left)

这将构建与列表作为关键字项目的字典。 这还涉及重复。 现在,通过第二个文件进行迭代,并检查关键是在字典:

matches = open('matches.txt', 'w')
uniq = open('uniq.txt', 'w')
for l in open('right.txt').readlines():
    if l.strip() in ldi:
        # write to matches
        matches.write(l)
    else:
        # write to uniq
        uniq.write(l)
matches.close()
uniq.close()


Answer 5:

>>> with open('first.txt') as f1, open('second.txt') as f2:
        w1 = set(f1)
        w2 = set(f2)


>>> with open('matches.txt','w') as fout1, open('differences.txt','w') as fout2:
        fout1.writelines(w1 & w2)
        fout2.writelines(w2 - w1)


>>> with open('matches.txt') as f:
        print f.read()


bob
mark
tom
>>> with open('differences.txt') as f:
        print f.read()


bruce


文章来源: Diff and intersection reporting between two text files