Python求两个文本文件以行为单位的交集、并集与差集的方法

  • Post category:Python

Python求两个文本文件以行为单位的交集、并集与差集的方法可以使用以下步骤:

1. 准备数据

首先,需要准备两个文本文件,假设它们的文件路径分别为file1.txtfile2.txt,并且每行内容是不同的字符串。

2. 读取文件内容

使用Python自带的文件读写函数open()readlines()读取两个文本文件的内容,并将每行内容存储为一个列表。

with open('file1.txt', 'r') as f1:
    file1_lines = f1.readlines()

with open('file2.txt', 'r') as f2:
    file2_lines = f2.readlines()

3. 求并集

求两个列表的并集可以使用Python内置的set数据类型,并转换为列表类型。

union = list(set(file1_lines) | set(file2_lines))

其中|运算符表示并集,set()将列表类型转换为集合类型,list()将集合类型转换为列表类型。

4. 求交集

求两个列表的交集也可以使用set数据类型和列表类型。

intersection = list(set(file1_lines) & set(file2_lines))

其中&运算符表示交集。

5. 求差集

求两个列表的差集可以使用set数据类型、-运算符和列表类型。

difference = list(set(file1_lines) - set(file2_lines))

其中-运算符表示差集。

示例

假设file1.txt的内容如下:

apple
banana
orange

file2.txt的内容如下:

cherry
apple
orange
pear

对这两个文件求交集、并集和差集,代码如下:

with open('file1.txt', 'r') as f1:
    file1_lines = f1.readlines()

with open('file2.txt', 'r') as f2:
    file2_lines = f2.readlines()

union = list(set(file1_lines) | set(file2_lines))
intersection = list(set(file1_lines) & set(file2_lines))
difference = list(set(file1_lines) - set(file2_lines))

print('Union: ', union)
print('Intersection: ', intersection)
print('Difference: ', difference)

运行结果如下:

Union:  ['banana\n', 'pear\n', 'cherry\n', 'apple\n', 'orange\n']
Intersection:  ['apple\n', 'orange\n']
Difference:  ['banana\n']

另外,如果两个文件的内容存在重复行,可以先将重复行去重后再进行操作。如下示例,先对两个文件进行去重操作并保存为新的文件,然后对新文件进行操作:

def remove_duplicates(file_path):
    """
    Remove duplicated lines in a file and save as a new file
    """
    with open(file_path, 'r') as f:
        lines = f.readlines()

    unique_lines = set(lines)

    with open('unique_' + file_path, 'w') as f:
        f.writelines(unique_lines)

remove_duplicates('file1.txt')
remove_duplicates('file2.txt')

with open('unique_file1.txt', 'r') as f1:
    file1_lines = f1.readlines()

with open('unique_file2.txt', 'r') as f2:
    file2_lines = f2.readlines()

union = list(set(file1_lines) | set(file2_lines))
intersection = list(set(file1_lines) & set(file2_lines))
difference = list(set(file1_lines) - set(file2_lines))

print('Union: ', union)
print('Intersection: ', intersection)
print('Difference: ', difference)

这个示例中,定义了一个辅助函数remove_duplicates(),用于去重并保存新文件。然后通过remove_duplicates()函数对原始文件进行去重操作,得到新的文件名为unique_file1.txtunique_file2.txt。最后,使用新文件进行操作。