平时都是把表格导入数据库,用数据库写sql找两个表之间相同的数据。上班的时候手上电脑没有装Oracle,有2个表格要比一下,要在表1(2w条数据,包含镇、村信息)中找到表2(2000条数据,只有名字和身份证号)中存在的人,就想用Python来试试:
在网上搜了一下,准备用xlrd这个模块,
导入xlrd,
importxlrd
设置路径,打开文件,
path1 ='D:\\1.xls'
data1 = xlrd.open_workbook(path1)
查询工作表,
sheets1 = data1.sheets()
sheet_1_by_name = data1.sheet_by_name(u'Sheet1')
sheet1_rows = sheet_1_by_name.nrows
打印测试:
第一行,第二行第4列,
print(sheet_1_by_name.row_values(1))
print(sheet_1_by_name.row_values(2,3,4))
结果:
['统筹区划代码', '新系统社区或者学校村组ID(8位数的那个)', '新系统社区或学校村组名称', '身份证', '姓名', '1、正常缴费;2、补缴', '1、实缴;2、欠缴', '缴费的年度', '个人缴费部分金额', '医保统筹基金划拨金额', '财政补贴金额', '', '']
['42****************']
第二个表格中只有姓名,身份证,
importxlrd
path1 ='D:\\1.xls'
data1 = xlrd.open_workbook(path1)
sheets1 = data1.sheets()
sheet_1_by_name = data1.sheet_by_name(u'Sheet1')
sheet1_rows = sheet_1_by_name.nrows
print(sheet_1_by_name.row_values(1))
print(sheet_1_by_name.row_values(2,3,4))
path2 ='D:\\2.xlsx'
data2 = xlrd.open_workbook(path2)
sheets2 = data2.sheets()
sheet_2_by_name = data2.sheet_by_name(u'Sheet1')
sheet2_rows = sheet_2_by_name.nrows
print(sheet_2_by_name.row_values(1,,1))
print(sheet_2_by_name.row_values(2,,3))
暂时还没研究怎么直接用data1和data2,直接就将其中的数据按行取出来用了,
sheet1_value = []
foriinrange(sheet1_rows):
sheet1_value.append(sheet_1_by_name.row_values(i))
sheet2_value = []
foriinrange(sheet2_rows):
sheet2_value.append(sheet_2_by_name.row_values(i))
如果表二中的身份证号在表一中存在,输出身份证号和表一中的信息,
foriinrange(sheet2_rows):
forjinrange(sheet1_rows):
ifsheet2_value[i][]insheet1_value[j]:
print(sheet2_value[i][],sheet1_value[j])
虽然比较慢,还是算完成了目标。
之后虽然拿到了输出的数据,但是Python在处理数据的时候,数字后面自动加了'.0',字符串前后加了单引号,在导入EXCEL后还要再将.0与单引号替换为空。
回头搜了一下EXCEL中如何匹配2表数据,说是用VLOOKUP函数。
领取专属 10元无门槛券
私享最新 技术干货