2012-06-01 74 views
0

我有兩個文件,下面的內容如下。我的問題是,在下面的代碼 中,如果id匹配file1和file2,那麼如何匹配file1中的第二列和相應的第二列文件2至n列..在python中匹配數組的列

def process(file): 
    pt = [] 
    f=open(file) 
    for l in f: 
     parts=l.strip().split('\t') 
     if len(parts) < 3: 
      print 'error with either ur input file or field check parts' 
      break 
     else: 
      pt.append(parts) 
    return pt 
    arr1 = process(file1) 
    arr2 = process(file2)     
    for arr in arr1: 
    if arr[0] in arr2: 
     //then match arr1[1] with arr2[1] and so on and get the results 

文件1:

ID674097256 voice tech department 
ID674097257 NA NA 
ID674097399 chat order processing department 

文件2:

ID674097212 voice tech department 
ID674097257 NA NA 
ID674097399 chat new processing department 
+0

什麼是你的數據文件大小?數據線與一些命令? – fanlix

+0

預期的輸出對我來說不是很明顯。你能否更清楚地解釋程序應該輸出什麼(給定file1和file2作爲輸入)? –

回答

0

使用zip

for (a1, a2) in zip(arr1, arr2): 
    if a1[0] == a2[0]: 
     ## do something. 
+0

這也是我的第一個想法,但在查看OP的代碼時,我得出的結論是OP要搜索整個文件中的每個ID,而不是僅在具有相同編號的行上搜索每個ID。如果我錯了,使用'zip'是個好主意。 –

0

如果我理解你的權利,你需要匹配的文件相同的路線。 此代碼爲您的任務也許有所幫助:

>>> s = range(10) 
>>> s 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> s2 = range(20) 
>>> s2 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> matching = {} 
>>> for i, k in zip(s,s2): 
...  matching[i] = k 
... 
>>> matching 
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} 
>>> 
+0

非常感謝...... – Rajeev

0

此代碼的第一陣列中的每一行進行比較與第二陣列的每一行。如果行是相同的(如果列表是相同的),那麼該行被放入列表「行」中,行的重複實例被刪除。

rows = [row1 for row1 in arr1 for row2 in arr2 if row1 == row2] 
    rows = list(set(rows))