2012-07-01 84 views
0

我有3個tsv文件,其中包含我的員工的不同數據。我可以將這些數據與每個文件中顯示的員工的姓氏和名字結合起來。如何連接來自三個不同電子表格的數據?

我想只收集每個員工的所有數據在一個電子表格中。

(我不能只是複製/過去的列,因爲一些員工不是在2號文件,但將在文件編號3)。

所以我認爲 - 我是一個初學者 - 腳本可以做到這一點,對於每個員工(連續),從新文件中收集儘可能多的數據。

編輯。 我的例子(實際上我每個文件大約有300行,有些員工不在所有文件中)。

文件1

 john  hudson  03/03 male 
    mary  kate  34/04 female 
    harry  loup  01/01 male 

文件2

 harry  loup  1200$ 

file3的

mary  kate  atlanta 

我想要什麼:

column1 colum2 column3  column4 column5 column6 
    john  hudson  03/03  male 
    mary  kate  34/04  female atlanta 
    harry  loup  01/01  male     1200$ 

這將幫助我很多!

+0

請顯示您的三個文件的示例。 – robert

回答

0

使用此python腳本:

import sys, re 

r=[] 
i = 0 
res = [] 
for f in sys.argv[1:]: 
    r.append({}) 
    for l in open(f): 
     a,b = re.split('\s+', l.rstrip(), 1) 
     r[i][a] = b 
     if i == 0: 
      res += [a] 
    i += 1 

for l in res: 
    print l," ".join(r[k].get(l, '-') for k in range(i)) 

腳本加載每個文件到字典(第一列被用作鍵)。 然後腳本遍歷第一個文件中第一列的值,然後 從字典(從其他文件創建)中寫入相應的值。用法

例子:

$ cat 1.txt 
user1 100 
user2 200 
user3 300 
$ cat 2.txt 
user2 2200 
user3 2300 
$ cat 3.txt 
user1 1 
user3 3 
$ python 1.py [123].txt 
user1 100 - 1 
user2 200 2200 - 
user3 300 2300 3 
+0

粘貼不起作用:「某些員工不在文件編號2中」。另外,看起來關鍵實際上是兩個領域,而不是一個領域。 – robert

+0

對不起,我沒有看到那個筆記。非常感謝你的提示。我重新回答了我的答案。 –

0

如果你熟悉SQL,那麼你可以使用Perl模塊DBD::CSV待辦事項的工作,很容易。但是這也取決於你是否願意寫perl。

相關問題