用python比对csv文件中的数据

做了个问卷,下载了收集数据xlsx文件,把数据弄到另一个表格文件中,需要校验数据转移的准确性。

使用python的csv库,使用csv.reader(f)函数读取表格数据,转成列表,确定数据行的主键,将主键作为字典的一个键,键的值是该行其他数据。

通过这次编程学到了python的dict类型添加键时直接[一个不曾存在的键],合并列表时直接用加号衔接。[1]+[2] ==> [1, 2]

下面贴出代码:

import csv

with open('a.csv') as f:
        reader = csv.reader(f)
        # print(list(reader))
        # input()
        als = list(reader)

with open('b.csv') as f:
        reader = csv.reader(f)
        # print(list(reader))
        bls = list(reader)

bdict = {}
for b in bls[1:]:
        if b[2] == '':
                continue
        bdict[b[2]] = [b[i] for i in [1]+list(range(4, 13))]

adict = {}
for a in als[1:]:
        adict[a[10]] = [a[i] for i in [9]+list(range(11, 20))]

for a in als[1:]:
        a_ls = adict[a[10]]
        b_ls = bdict[a[10]]
        b_wrong = False
        for i in range(len(a_ls)):
                if i in [1, 8]:
                        if b_ls[i] not in a_ls[i]:
                                b_wrong = True
                                a_str = a_ls[i]
                                b_str = b_ls[i]
                else:
                        if b_ls[i] != a_ls[i]:
                                b_wrong = True
                                a_str = a_ls[i]
                                b_str = b_ls[i]
                if b_wrong:
                        print('%s的%s和%s不一致'%(a[10], a_str, b_str))
                        break

其实用不着校验,在转移数据的时候使用csv库读和写,逻辑正确就肯定没问题。

当然机器做事不会出错,使用机器并不意味着人的能力的低下。

参考链接

1

【Python】Python处理csv文件

2

python中如何合并两个列表