程序介绍
之前帮朋友编写了一个脚本,他的需求是在一个数据大概有一万条记录的excel表格中删除符合要求的行,需要删除的记录从一个txt文档中获取。根据观察,发现可以根据银行账号这个字段判断该条记录是否在excel中存在。
编写步骤
根据上面的需求,我们程序需要做的任务主要有:
- 从txt文档中提取银行账号字段;
- 遍历excel文档,判断每一行的银行账号数据是否在txt文档存在,如果存在就删除该行;
我们一步一步用代码实现:
- 从txt文件中提取银行账号信息,保存在一个列表中
我们首先打开一个txt文档,因为该文档的编码是“UTF-16 LE”格式,所以在打开时必须指定编码格式为“UTF-16 LE”,之后将数据保存在一个列表lista中,最后通过列表推导式提取出自己需要的数据并保存在列表aa中。
2. 在excel中删除指定的行
我们首先打开excel文件并获取要操作的sheet页,定义一个变量row_n,之后遍历该sheet页里面的数据,当excel里面的数据在列表aa中存在时,使用delete_rows删掉该行数据,当不存在时row_n加1,当删除数据后,数据所处的行号是变化的,当删除数据时row_n不自动加1。
遍历完成后使用save方法保存数据。
程序代码
import openpyxl as py
temp = open(file='D:\文档\耕地补贴失败.txt',mode='r',encoding='UTF-16 LE')
lista = temp.readlines()
aa = [1 if not li.__contains__('|') else li.split('|')[1].strip() for li in lista ]
wb = py.load_workbook('D:\文档\刘湾镇2021年农业补贴(上报专用).xlsx')
sheet = wb['Sheet1']
max = sheet.max_row
row_n = 1
for i in range(1,max+1):
va = str(sheet[f'N{row_n}'].value).strip()
if aa.__contains__(va):
sheet.delete_rows(row_n)
else:
row_n = row_n + 1
wb.save(filename='D:\文档\刘湾镇2021年农业补贴(上报专用)_7.xlsx')
wb.close()
需要资料的微信公众号搜索 爱写代码的阿甘 关注获取