将多个txt文件加载到MySQL中

1 投票
2 回答
2435 浏览
提问于 2025-04-17 06:54

我有超过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

撰写回答