2011-11-23 47 views
0

我有超過40個txt文件需要加載到Mysql的表中。每個文件包含3列數據,每列列出一個特定類型的數據,但通常每個txt文件的格式是完全相同的,但這些文件名稱是不同的,首先我試過LOAD DATA LOCAL INFILE 'path/*.txt' INTO TABLE xxx"將多個txt文件加載到mysql中

原因我想也許使用*.txt可以讓Mysql加載這個文件夾中的所有txt文件。但事實證明不是。

那麼我該如何讓Mysql或python做到這一點?或者我需要先將它們合併爲一個文件,然後使用LOAD DATA LOCAL INFILE命令?

非常感謝!

+0

怎麼辦你到底想要這樣做?一列中的一行中的所有內容?每個文件的每個文本在一個不同的列中?或者有點不同? –

+1

你能否澄清這個問題與[另一個](http://stackoverflow.com/q/8239554/146792)有什麼區別?在我看來,你基本上都在問同樣的事情......(但我當然可能錯了!) – mac

+1

同樣的問題,同一個用戶,沒有好的 – juliomalegria

回答

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 
0

唯一和最好的方法是將您的數據合併到1個文件中。這是使用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。只要您的列之間的分隔嚴格相同,就可以正常工作。標籤是最好的在我看來,)