用于比较两个文件中的列的Python脚本

时间:2016-12-22 12:15:46

标签: python csv

此脚本的第一个目标是将第1列中的前14位数字放在两个文件(1.csv2.csv)中。 1.csv具有正确的记录映射,其中2.csv几乎没有匹配的记录,因此比较两个文件中column1的前14位数字并获取不唯一的记录,这是通过脚本完成的。

第二个目标,即没有完成,例如我在1.csv中有一条记录,第一列和第二列的相同记录在2.csv中,另一条记录第一列相同和第二列不同的列,我希望此行也打印在输出中。

脚本是:

import csv
import sys

with open('1.csv', 'r') as csv1, open('2.csv', 'r') as csv2:
    csv1_lines = csv1.readlines()
    csv2_lines = csv2.readlines()

csv1_headers = [line[:14] for line in csv1_lines]
csv2_headers = [line[:14] for line in csv2_lines]

with open('output.csv', 'w') as out_file:
    for line in csv2_lines:
        if line[:14] not in csv1_headers:
            out_file.write(line)

1 个答案:

答案 0 :(得分:0)

我怀疑你可能实际上想要这样的东西:

import csv
import io

file_1 = io.StringIO('''
1111111111111111:xxxxxxxxxxxxxxx
2222222222222222:yyyyyyyyyyyyyyy
3333333333333333:zzzzzzzzzzzzzzz
'''.strip())

file_2 = io.StringIO('''
1111111111111111:xxxxxxxxxxxxxxx
1111111111111110:xxxxxxxxxxxxxxx
1111111111111123:xxxxxxxxxxxxxxx
11111111111111:xxxxxxxxxxxxxxx
2622222222222222:yyyyyyyyyyyyyyy
2222222222222222:yyyyyyyyyyyyret
2222222222222222:yyyyyyyyyyyyyyy
4444444444444444:ppppppppppppppp
'''.strip())

good_reader = csv.reader(file_1, delimiter=':')
match_reader = csv.reader(file_2, delimiter=':')

good_values = [row for row in good_reader]

for row in match_reader:
    if row not in good_values:
        print(row)

但是,它并没有提供您建议您期望的相同输出。那么也许你真的想要这个?

good_values = [(row[0][:14], row[1]) for row in good_reader]

for row in match_reader:                                                               
    if (row[0][:14], row[1]) not in good_values:                              
        print(':'.join(row))