(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