比较两个文件中未排序的数字

2022-12-01 05:49:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个文件,我试图比较两个包含数字的文件。你知道吗

File1:
123
456
789

File2:
234
567
890
34342

我遇到了两个我不知道怎么解决的问题。 这是我的密码:

import filecmp

file1 = open('file1.txt', 'r')
file2 = open('file2.txt', 'r')

file1Lines = file1.readlines()
file2Lines = file2.readlines()

matchedList = []
unmatchedList = []

for line in file1Lines:
    for secline in file2Lines:
        if line == secline:
            matchedList.append(line)
        else:
            unmatchedList.append(line)

file1.close()
file2.close()

print(unmatchedList)

我试着迭代两个文件中的行,把匹配的数字(只有一个副本)放在matchedList中,把不匹配的放在unmatchedlist中。 我考虑过为file1line中的每一行迭代file2line(这应该不是问题,因为文件相对较小),问题是每当行不匹配时,它只会在不匹配的数组中附加'line'。 这就是我最后得到的:

['123\n', '123\n', '123\n', '123\n', '456\n', '456\n', '456\n', '456\n', '789\n', '789\n', '789\n', '789\n']

我遇到的另一个问题是,如果其中一个文件较长(如file2),它将不会检查该文件,而且我也不知道该数字是否匹配。你知道吗


Tags: 文件intxtforline数字openfile1file2readlinesfile1linesseclinematchedlistfile2linesunmatchedlist
1条回答
网友
1楼 · 发布于 2022-12-01 05:49:01

这看起来像是为set数据结构精心设计的作业。你知道吗

https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

file1_contents = '''123
456
789'''
file2_contents = '''234
567
123
456
456
234
123
876
890
34342'''

file1 = set(file1_contents.splitlines())
file2 = set(file2_contents.splitlines())

# intersection to find common lines
common = file1 & file2
# symmetric difference for finding uncommon lines
# all lines = file1 + file2
# all lines - common = (lines in 1 but not in 2) + (lines in 2 but not in 1)
uncommon = file1 ^ file2

print('common', common)
print('uncommon', uncommon)

输出:

common {'123', '456'}
uncommon {'789', '34342', '876', '890', '234', '567'}