python写向数据库导入一个有100万行的csv文件,提高速度,还是要95秒

面对Python导入CSV到MySQL时遇到的MemoryError问题,作者通过分批导入解决了问题。尝试一次性导入10万行、30万行数据,时间均为95秒。分享了自定义文件分割函数,考虑了文件编码多样性和空行问题,以及使用LOAD DATA LOCAL INFILE命令在共享盘上导入文件。
摘要由CSDN通过智能技术生成

(1小记录)python写向数据库导入一个有100万行的csv文件,速度终于快了

一开始用load infile直接整个文件导入,结果Python报错:MemoryError

导入语句:
load_sql = “”" LOAD DATA lOCAL INFILE ‘{}’ INTO TABLE {} FIELDS TERMINATED by ‘,’
optionally enclosed by ‘"’ escaped by ‘"’ lines terminated by “\r\n”;;""".format
(tempCSVDir, tableName)
解决方案:
1、把文件分成1万行进行100次导入,写入临时文件,再读入,结果花了17分钟!
2、尝试着一次读多些行,发现其实导入10万行速度也是快的,花了95秒
3、导入30万行速度也是花了95秒
4、自己写了一个函数进行文件分割:
fileDir:文件完整路径
ig:忽略文件几行
row:导入文件几行
timenum:第几次调用
allNrows:全部导入几行了
fileName:文件名字
tempCSVPath:存放临时csv文件的位置,结尾是带/的

(1)中间try…except…是因为文件编码太多种了…
(2)一开始try…except…是因为文件如果截取到全部空行的话会报错,这时候我就判断为截取文件完毕
(3)load data infile 中间加了local 是因为我导入的文件是在共享盘上(映射到本地)的文件

// An highlighted block
def read_part_file(fileDir,ig,row,timenum,allNrows,fileName,tempCSVPath):
    try:
        if ".csv" in fileDir:
            try:
                fileData = pd.read_csv(fileDir,skiprows=ig, nrows=row, low_memory=False, encoding='utf_8_sig')
            except:
                fileData = pd.read_csv(fileDir,skiprows=ig, nrows=row, low_memory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值