4

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

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

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

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

匹配.txt

bob 
mark 
tom 

差异.txt

bruce

我将如何使用 Python 完成此任务?或者使用 Unix 命令行,如果它足够简单的话?

4

6 回答 6

16

排序 | 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 的 set 类型,但 comm 更容易。

于 2013-04-29T23:12:26.270 回答
11

Unix外壳解决方案-:

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

# unique lines
sort text1.txt text2.txt | uniq -u
于 2013-04-29T22:50:15.850 回答
6
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)

至少是这样的

于 2013-04-29T23:17:54.277 回答
1

Python 字典是 O(1) 或非常接近,换句话说,它们非常快(但如果您要索引的文件很大,它们会使用大量内存)。所以首先读入第一个文件并构建一个字典,如下所示:

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

列表理解和 strip() 是必需的,因为 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()
于 2013-04-29T22:56:48.747 回答
0
>>> 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
于 2013-04-29T23:25:15.000 回答
0

用水平线制作一个;


file_1_list = []

with open(input('Enter the first file name: ')) as file:
    file_1 = file.read() 

    file.seek(0) 

    lines = file.readlines()
    for line in lines:
        line = line.strip()
        file_1_list.append(line)

 with open(input('Enter the second file name: ')) as file:
    file_2 = file.read()
    file.seek(0)
    lines = file.readlines()
    for line in lines:
        line = line.strip()

if file_1 == file_2:
    print("Yes")

else:
        print("No")
        print(file_1)
        print("--------------")
        print(file_2)
于 2020-07-23T15:49:52.603 回答