欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-11 08:03:37
...

前两天一直想把1400多个excel文件导入到数据库中,上网搜索一直没找到对应的代码,大多是一个excel文件中多个表单的批量导入。作为小白的我试了很多次,终于在东拼西凑中写出来了一个比较实用的代码。每个文件大概有3000多条数据,每个文件大概3秒左右传输完成。

话不多说先上代码

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做的。
python批量将一个文件夹下多个excel文件数据导入到MySQL
name是上面提到的文件名字典。

import pymysql
import name
import xlrd

2.第一个for循环,循环读取name.py文件中name1,name2数据。
可在 存放excel文件的文件夹中 新建.py文件并先运行下列代码。检验name.py文件是否有错误、程序是否能正确读取excel文件。最好filename=name.name1filename=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中设计好表的结构。

最后,希望大家多多指教。