用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库读和写,逻辑正确就肯定没问题。
当然机器做事不会出错,使用机器并不意味着人的能力的低下。