问题:本地有一大堆CSV文件需要导入到MySQL中
要求:一个CSV文件创建一张表,并以CSV文件名(去掉.csv后缀)命名MySQL表名,CSV文件的字段名作为MySQL中的字段名。
因为本地的csv文件大约有1-2k个手动去MySQL中建表然后倒入完全不现实。于是就用Python写了一个脚本,自动读取本地文件夹下的csv文件,导入到MySQL中。
准备工作:
语言:python 2
第三方模块:os,pandas,pymysql
工具:Pycharm
思路分析:
1.因为需要读取本地文件下的所有csv文件,那就需要用到os模块
#csv文件目录
dir = 'C:\data'
file_list = os.listdir(dir)
for i in range(len(file_list)):
file_path = os.path.join(dir, file_list[i])
if os.path.isfile(file_path):
#自己的操作
我的csv文件在C:\data下 ,使用os.listdir()遍历给定路径下的文件,使用os.path.isfile()判断是文件还是目录,如果是文件执行导入到MySQL中的操作。想了解更多os操作可以看这篇博客
2.连接MySQL数据库
指定数据库,端口,用户,密码即可。
hostname = '127.0.0.1'
port = 3306
user = 'root'
passwd = '123'
db = 'undata'
M = CsvToMysql(hostname=hostname, port=port, user=user, passwd=passwd, db=db)
3.读取csv文件
使用的是pandas读取csv文件,这里有两点坑。
第一:csv文件中的字段可能会有空,在读取的时候会变成nan,nan到了mysql中是没有办法处理的就会报错,所以需要加上这个keep_default_na=False,设为false后就会保留原空字符,就不会变成nan了。
第二:在用csv文件名作为mysql表名创建表时,可能