将多个txt文件加载到MySQL中
我有超过40个txt文件需要加载到Mysql的一个表里。每个文件里有3列数据,每列都是一种特定类型的数据。虽然每个txt文件的格式完全一样,但文件名各不相同。最开始我试着用 LOAD DATA LOCAL INFILE 'path/*.txt' INTO TABLE xxx"
这个命令。
我想也许用 *.txt
可以让Mysql一次性加载这个文件夹里的所有txt文件。但结果并没有成功。
那么,我该怎么让Mysql或者Python来处理这个呢?还是说我需要先把它们手动合并成一个文件,然后再用 LOAD DATA LOCAL INFILE
命令?
非常感谢!
2 个回答
0
最简单也是最好的方法就是把你的数据合并成一个文件。用Python来做这件事非常简单:
fout=open("out.txt","a")
# first file:
for line in open("file1.txt"):
fout.write(line)
# now the rest:
for num in range(2,NB_FILES):
f = open("file"+str(num)+".txt")
for line in f:
fout.write(line)
f.close() # not really needed
fout.close()
然后你可以用你熟悉的命令 (... INFILE ...) 把这个文件加载到MySql里。只要你每一列之间的分隔方式保持一致,这样就没问题了。我觉得用制表符(Tab)作为分隔符是最好的选择;)
2
如果你不想把你的文本文件合并在一起,可以很简单地“扫描”这个文件夹,然后对每个文件运行SQL导入的查询:
import os
for dirpath, dirsInDirpath, filesInDirPath in os.walk("yourFolderContainingTxtFiles"):
for myfile in filesInDirPath:
sqlQuery = "LOAD DATA INFILE %s INTO TABLE xxxx (col1,col2,...);" % os.path.join(dirpath, myfile)
# execute the query here using your mysql connector.
# I used string formatting to build the query, but you should use the safe placeholders provided by the mysql api instead of %s, to protect against SQL injections