利用Python脚本实现Mysql的批量建表以及csv文件的批量导入

利用Python脚本实现Mysql的批量建表以及csv文件的批量导入

大标题写给自己!!!!

这是我在CSDN的第一篇文章,即将开启我的数据分析(其实现在我还不知道我以后会做什么,现在几乎脱离了我大学的电子信息工程专业,不过我电子专业也确实没学明白)…之路,即将面临秋招,希望能给自己做个小铺垫吧也就是。

背景

最近在跟学校老师还有研究生学姐做无人飞机项目,我负责数据整理分析,之前学了些python,现在又顺便学了些mysql,最近学姐给了我一份8.8G的csv数据文件,这么大的文件用office打开显示不全,于是用Python对这个8.8G的文件进行切割,切成2000多个60000行的csv小文件,具体切割的代码我就不往上放了。

但是现在问题来了,我一直用mysql进行简单的table创建和把一个一个的csv文件导入和筛选,现在学姐让我弄一年的数据出来,也就是365个文件,在网上找了好多教程找不到mysql的批量处理的语言,其实python应该也可以但是我想能不能把两者结合一下(主要是我不会用python处理 ),于是我想用Python编写大量的mysql语言,用笨方法批量导入。

第一次写文章废话有点多,那么现在废话少说,步入正题。

MySQL批量创建table

这里我用了python的for循环生成了一年的表格名称,顺便生成mysql语句存入txt文件中:

writefile = open('D:/sql2.txt','w')
writefile.write('use 5year_pm;'+'\n')
# 生成十二个月
for month in range(1, 13):
    if month == 2:
        for date in range(1, 29):
            # 此处输出mysql创建table语句,create table + 表名 + 条件
            command = 'create table '+str(month) + '_' + str(date)+ ' like 5year_pm.4_14'+';'+'\n'
            # 写入txt文件
            writefile.write(command)
            print(command)

    elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        for date in range(1,32):
            command = 'create table ' + str(month) + '_' + str(date) + ' like 5year_pm.4_14'+';'+'\n'
            writefile.write(command)
            print(command)

    else:
	
        for date in range(1,31):
            command = 'create table ' + str(month) + '_' + str(date) + ' like 5year_pm.4_14'+';'+'\n'
            writefile.write(command)
            print(command)

其实这个代码写的很低级,我自己都不好意思摆上来。但是为了纪念一下,而且只是给一下思路,就勉强放上来吧。

利用.bat文件调用Python生成的sql.txt文件

新建文本文档,输入

mysql -u+[你的用户名] -p+[你的密码] <[上文中txt文件的存储位置]。
pause

以我的为例

mysql -uroot -p123456 

编辑好后保存为.bat文件,双击运行,显示如下即成功,这时候打开Mysql看到你的table已经建好了。利用Python脚本实现Mysql的批量建表以及csv文件的批量导入_第1张图片
利用Python脚本实现Mysql的批量建表以及csv文件的批量导入_第2张图片

将文件夹中csv文件批量导入到table中

部分转自CSDN博主「懒惰的gler」,原文链接https://blog.csdn.net/u010858605/article/details/53896052

因为我所用的csv文件是从第347个文件开始的,所以我把需要的文件复制到一个文件夹中方便使用。
方法和上面一样也是利用python批量生成MySQL语言,代码在上文基础上有所修改:

import glob
i = 0
# 一些导入的条件
limit1 = 'fields terminated by '+"'"+","+"'"+"\n"
limit2 = 'optionally enclosed by '+"'"+'"'+"'"+"\n"
limit3 = 'escaped by '+ "'"+'"'+"'"+"\n"
limit4 = 'lines terminated by '+"'"+"\\"+"r"+"\\"+"n"+"'"+";"+"\n"
limit = limit1+limit2+limit3+limit4

# 读取文件夹中的csv文件
filenames = []
for filename in glob.glob(r'D:/接收的文件/数据/02year/*.csv'):
    filenames.append(filename.replace('\\','/'))
# print(filenames)

writefile = open('D:/batch_im_csv.txt','w')
writefile.write('use air_data;'+'\n')
# 生成十二个月
for month in range(1, 13):
    if month == 2:
        for date in range(1, 29):
            # 此处输出mysql创建table语句,create table + 表名 + 条件
            # command = 'create table '+str(month) + '_' + str(date)+ ' like 5year_pm.4_14'+';'+'\n'
            # 写入txt文件
            command ='load data local infile '+'"'+filenames[i]+'"'+' into table ' + str(month) + '_' + str(date)+'\n'
            i += 1
            command = command+limit
            writefile.write(command)
            # print(command)

    elif month == 1 or month == 3 or month == 5 or month == 7 or month == 8 or month == 10 or month == 12:
        for date in range(1,32):
            # command = 'create table ' + str(month) + '_' + str(date) + ' like 5year_pm.4_14'+';'+'\n'
            command ='load data local infile '+'"'+filenames[i]+'"'+' into table '+ str(month) + '_' + str(date)+'\n'
            i += 1
            command = command + limit
            writefile.write(command)
            # print(command)

    else:

        for date in range(1,31):
            # command = 'create table ' + str(month) + '_' + str(date) + ' like 5year_pm.4_14'+';'+'\n'
            command ='load data local infile '+'"'+filenames[i]+'"'+' into table '+ str(month) + '_' + str(date)+'\n'
            i += 1
            command = command + limit
            writefile.write(command)
            # print(command)

执行代码后生成‘batch_im_csv.txt’文件,修改刚才.bat文件中执行的文件信息,再次执行.bat文件,大功告成!

写在最后

我这次完成的是分别把每一个csv文件导到每一个table中,如果有其他需求可以适当改一改代码,总之主要思路就是想完成批量处理MySQL时可以考虑用python批量生成MySQL语句然后利用.bat执行,方便快捷还易修改。

你可能感兴趣的:(数据库,MySQL,Python,数据库,csv)