公司 最近在做对比账单的事 一百多个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 , 不喜勿喷
来源:https://blog.csdn.net/qq_42875402/article/details/102748297