公司 最近在做对比账单的事 一百多个xls文件 需要导入数据库 公司直间导出来的支付宝文件 用xlrd 打不开 之间报错 后缀改完也是不好用的 下面是我整理出来的 代码 希望对大家有用 有兴趣的朋友可以研究下pandas,应该比xlrd好用 有不足之处 下方留意指出 大家互相学习 共同进步 。
import MySQLdb import shutil host = "localhost" conn = MySQLdb.connect(host=host, port=3306, user='root', password='123456', database='pdd_statistics', charset='utf8') cursor = conn.cursor() import xlrd import os import win32com.client as win32 # 查询 文件夹中的文件的名称 def paths(): global path path = r'C:\Users\Administrator\Desktop\aaaaa' # 这是本地的文件夹路径 for i in os.walk(path): print(i[2]) return i[2] # 修改 文件 def up_xlsx(): xlsxs = paths() for x in xlsxs: up_xlsxs = path+"\\"+str(x) #路径 拼接文件的名称 excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(up_xlsxs) wb.SaveAs(up_xlsxs+"x", FileFormat=51) #FileFormat = 51 is for .xlsx extension wb.Close() #FileFormat = 56 is for .xls extension excel.Application.Quit() os.remove(up_xlsxs) files_name() # 运行新的文件 def files_name(): xlsxs = paths() for x in xlsxs: print(x, "文件的名称") wj_name = path+"\\"+str(x) #路径 拼接文件的名称 filename = xlrd.open_workbook(wj_name) # 打开文件 sheets = filename.nsheets # 获取当前文档的表(得到的是sheet的个数,一个整数) sheet = filename.sheets()[0] # 通过sheet索引获得sheet对象 lens_nrows = sheet.nrows # 获取行数 ncols = sheet.ncols # 获取列数 for i in range(1, lens_nrows-1): print(i) text = [] cell_value0 = sheet.cell_value(i, 0) text.append(cell_value0) cell_value1 = sheet.cell_value(i, 1) text.append(cell_value1) cell_value2 = sheet.cell_value(i, 2) text.append(cell_value2) cell_value3 = sheet.cell_value(i, 3) text.append(cell_value3) cell_value4 = sheet.cell_value(i, 4) text.append(cell_value4) cell_value5 = sheet.cell_value(i, 5) print(text) dbs_text = ((str(text[0]), str(text[1]), str(text[2]), str(text[3]), str(text[4]), str(text[5]))) try: sql_db(dbs_text) except: pass def sql_db(dbs_text): sql = 'insert into pdd_zfb_copy(XXX1,XXX2,XXX3,XXX4,XXX5,XXX6) values (%s,%s,%s,%s,%s,%s)' row_count = cursor.execute(sql, dbs_text) conn.commit() if __name__ == '__main__': up_xlsx()
其实上面那个 利用文件行数循环的那个 如果数据库属性比较多的话 可以做成循环的嵌套 我这是省事了, 直接粘贴
这套代码 修改只需要修改两个地方
1 path 这是本地的文件夹路径 只要改这个全局修改
2 sql_db() 函数中 的 数据库名称 和里面对应的属性值
写的比较low , 不喜勿喷
来源:51CTO
作者:林羽的博客
链接:https://blog.csdn.net/qq_42875402/article/details/102748297