2014-05-23 139 views
1

我試圖合併基於公共列的兩個文本文件中的選擇列。我正在這樣做,以便我可以將它導入到MySQL中。顯然,在SQL中,這將是一個簡單的查詢來獲取信息,但我實際上需要一個單獨的永久表與指定的連接,因此我需要爲導入創建此文本文件。基於Python中的公共列合併兩個文本文件

這是我目前使用的代碼:

import csv 

with open('locations.txt', 'rb') as l,\ 
    open('checkins.txt','rb') as c,\ 
    open('location.txt','w') as location: 
    writer = csv.writer(location, delimiter='\t') 

    for line in c: 
     words = line.split() 
    for lines in l: 
     word = lines.split() 
    writer.writerow([word[:], words[3], words[4], words[6:16]]) 

下面是示例輸出:

['220811', 'Flemington', '2010-10-23'] 59.31297463 '\t' 18.02006155 '\t' ['59.2968', '18.0313', '1.91024672383817', '12420', 'Bandhagen', 'SE']

(順便說一句,我不斷收到撇號和括號我輸出。有沒有辦法擺脫這些?我沒有問題,直到我導入csv並使用括號的編輯器方法,所以我猜這就是問題所在。)

我想要的輸出是從位置.txt的第1列和checkins.txt的第5列加入的數據。我應該找到一種方法來根據我想要加入的列對兩個文本文件中的信息進行排序嗎?

此外,第5列中的位置列1中不應存在任何不同的信息,但checkins.txt文件中第5列中將存在重複項。有沒有適當的方法來處理這個問題? (我想保持與第1倍中的值的locations.txt相關聯的一式兩份)

+0

爲什麼不在SQL中通過選擇連接到一個新表中來做到這一點? – ydaetskcoR

+0

這可能是一個非常愚蠢的問題,但我可以做到這一點?加入後我可以在數據庫中創建一個永久表? – Christina

+0

你需要'INSERT INTO [tablename] SELECT ....'用於MySQL。 MySQL文檔在這裏:http://dev.mysql.com/doc/refman/5.6/en/insert-select.html – ydaetskcoR

回答

0

嘗試打印之前加入數組:

writer.writerow("\t".join(word[:] + words[3] + words[4] + words[6:16])) 

此外,要從升覆蓋變量單詞。所以,你沒有得到你想要的。第二個文件的輸出可能需要像words2 = lines.split()。

+0

我不確定是不是我輸入錯誤,但這不會建立時,我試了一下。 – Christina

+0

對不起,您需要圍繞列表中的單個元素:...「\ t」。join(word [:] + words [3:5] + words [6:16])通過將3和4合併在一起[3:5],我縮短了一點。我最初編寫它的方式是試圖將一個字符串追加到python中不允許的列表中。我還注意到,你以不同的方式命名你的名單(單詞和單詞)......所以,我對單詞的評論有點不正確。儘管如此,當創建具有類似但不同內容的新變量時,更好清楚 – user632657

0

正如評論中所述,只需將聯接選擇到新表中就可以實現。

在MySQL的是它INSERT... SELECT syntax像這樣:

INSERT INTO New_Table 
    SELECT t1.field1, t1.field2, t2.field1 
    FROM table1 t1 
    INNER JOIN table2 t2 ON t1.PK = t2.table1_FK 

因此,你應該儘量保持這樣的操作在數據庫內針對性能原因,並讓你的腳步更容易重複,而不是拋售查詢到CSV,然後單獨加入查詢(儘管您可以通過首先編寫連接查詢然後將其輸出到CSV但這仍然是錯誤的方法)跳過此步驟,然後將其插入數據庫。

相關問題