将多个文本文件加载到mysql中

时间:2011-11-23 13:36:20

标签: python 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 :(得分: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。只要列之间的分隔严格相同,就可以正常工作。标签在我看来是最好的;)

答案 1 :(得分:0)

如果您想避免合并文本文件,可以轻松“扫描”文件夹并为每个文件运行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