xls文件 批量导入 MySQL 数据库

北城余情 提交于 2019-12-02 09:08:35
公司 最近在做对比账单的事 一百多个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 , 不喜勿喷

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!