python批量将一个文件夹下多个excel文件数据导入到MySQL

500baff54d8b5aedd9f9db590737bb7c.jpeg

前两天遇到一个面试题,把一个文件夹下的多个excel文件导入到数据库中,上网搜索一直没找到对应的代码,大多是一个excel文件中多个表单的批量导入。试了很多次,终于在东拼西凑中写出来了一个比较实用的代码。

话不多说先上代码

import pymysql
import name
import xlrd




# 打开数据库连接  地址 用户名 密码 数据库名称
db = pymysql.connect("localhost", "root", "123456", "testdata")
#数据库操作语句,按需更改
query = """INSERT INTO 表的名称 ( 数据库表的表头,后面%s与表头个数相配 ) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)"""
#给个例子:
#query = """INSERT INTO student (no, name, sex, age) VALUES (%s, %s, %s, %s)"""




#导入文件文件名
filename = name.name2




for name in filename:
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    wb = xlrd.open_workbook(name)
    print('read ' + name)
    ws = wb.sheet_by_name('Sheet1')
    max_row = ws.nrows


    list = []
    num = 0




    for i in range(2, max_row):#去除标题行逐条读取数据
        row_data = ws.row_values(i)
        # 可根据需要删除不需要的列
        value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], row_data[6], row_data[7],
                 row_data[8], row_data[9], row_data[10], row_data[11], row_data[12], row_data[13], row_data[14], row_data[15])
        #将value的数据存在list中
        list.append(value)
        num += 1
        # 超过1000条数据,转存一次。可根据需要设置比如100、10000...
        if(num >= 1000):
            cursor.executemany(query, list)
            num = 0
            list.clear()
            print('1000-done')
    cursor.executemany(query, list)
    cursor.close()
    db.commit()




db.close()
print("-Done-")

解释说明

1.需要先把文件名以python字典形式保存在.py文件内中,使用时import一下。

我这里命名为name.py分为两个组name1、name2。

将文件划分为两块方便测试。读取文件名的具体方法可上网去搜索,挺好搜索的,也是用python做的;命名分组直接自己加上name1、name2就行了。

name是上面提到的字典文件名。

import pymysql
import name
import xlrd

2.第一个for循环,循环读取name.py文件中name1,name2数据。

可在 存放excel文件的文件夹中 新建.py文件并先运行下列代码。检验name.py文件是否有错误、程序是否能正确读取excel文件。最好filename=name.name1和filename=name.name2都过一遍。

import name
import xlrd
filename = name.name2
for name in filename:
    wb = xlrd.open_workbook(name)
    print('read ' + name)
    ws = wb.sheet_by_name('Sheet1')
    max_row = ws.nrows
    print(max_row)

第2个for循环,循环读表格中数据

value中可选取想要读取的列的值,比如:不想读取第一列的值可把row_data[0]删除。

import name
import xlrd
filename = name.name1
for name in filename:
    wb = xlrd.open_workbook(name)
    print('read ' + name)
    ws = wb.sheet_by_name('Sheet1')
    max_row = ws.nrows
    print(max_row)
    for i in range(2, max_row):#填入取值行列
        row_data = ws.row_values(i)
        # 可根据需要删除不需要的列
        value = (row_data[0], row_data[1], row_data[2], row_data[3], row_data[4], row_data[5], row_data[6], row_data[7],
                 row_data[8], row_data[9], row_data[10], row_data[11], row_data[12], row_data[13], row_data[14], row_data[15])
        #将value的数据存在list中
        list.append(value)
    print(list)

3.连接MySQL并写入数据

这就是最后一步了,参照第一段代码。在这之前需要在mysql中设计好表的结构。

e8653ebb9eff2df19e17534b4651c0ff.png

12cd36ecb7cdf4c3e086444673224a4d.png

文章来源于网络

原文链接:https://blog.csdn.net/Jivder/article/details/104665242

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值