2012-06-27 32 views
0

嗨,我有兩個文本文件,每個文件都包含有關特定結構的不同信息。兩個文件中的結構由一個id號標識。我想要做的是在第一個文件中讀取並跳過不滿足條件的數據行。然後在第二個文件中有沒有相同ID號的行被跳過,其他處理過。我試圖使用嵌套for循環來做到這一點,我也嘗試了它作爲兩個單獨的函數,但都沒有嘗試工作。我現在試圖使用下面的一個循環來完成它,但得到這個錯誤閱讀並比較Python中的兩個文件

UnboundLocalError: local variable 'linel' referenced before assignment 

這是代碼。我

F = 'file1.txt' 
Fl = 'file2.txt' 


X = []    # Creats Data Lists 
M = [] 
Id1 = [] 
Id2 = [] 
LC = 10 
N = 11 

fl = open(Fl) 
fl.readline() 
nlinesl = islice(fl,N) 
f = open(F)   #Opens file 
f.readline()   # Strips Header 
nlines = islice(f, N) #slices file to only read N lines 


for line in nlines and linel in nlinesl:    
    if line !='': 
    linel = linel.strip() 
    linel = linel.replace('\t','') 
    columnsl = linel.split() 
    lum = float(columnsl[1]) 
    if lum != LC: 
     continue 
    id1 = int(columnsl[0]) 
    Id1.append(id1) 
    if line !='': 
     line = line.strip() 
     line = line.replace('\t','') 
     columns = line.split() 
     id2 = int(columns[1]) 
     Id2.append(id2) 
     if Id != Id2: 
     continue 
     x = columns[2]    # assigns variable to columns 
     X.append(x) 


    print(X) 

這裏是我想發生 兩個文件

file1= 1 1 1 1  file2 = 1 1 1 1 
     2 5 1 1    1 2 1 1 
     2 3 4 4    1 1 1 1 
Lc = 5 
Xa = 1 

因此,只有文件1的第二行會生存下去,這意味着只有在文件2的第二行會是怎樣一個例子因爲它們具有相同的標識而被處理。在我的文件ID被

id = columns[0] for file1 

id = columns[1] for file2 

在此先感謝

+0

你可以請標記導致錯誤的行,也可以公關懷着一個完整的追蹤......它會更容易找出問題。 – Levon

+1

你需要壓縮你的雙迭代器:'對於行,zip中的linel(nlines,nlinesl):' –

+0

@ K-Braffor它現在可以工作了,謝謝 – Surfcast23

回答

2

我不認爲這是合法的語法:

for line in nlines and linel in nlinesl:   

試試這個:

for line, line1 in zip(nlines, nlines1): 

而且,這些都是棘手/容易出錯的變量名:)

例如,

a = range(20, 26) 
b = range(200, 226) 

#for i in a and j in b: # causes 
# print i, j   # error 

for i, j in zip(a, b): 
    print i, j 

產生預期輸出

20 200 
21 201 
22 202 
23 203 
24 204 
25 205 
+0

zip()做到了。我會多讀一讀謝謝你! – Surfcast23

+0

@ Surfcast23不客氣,我很樂意幫助。 – Levon

0

東西沿着這些路線:

ids = set() 
for line in nlines: 
    if line != '': 
     cols = line.strip().replace('\t','').split() 
     lum = float(cols[1]) 
     lid = int(cols[0]) 
     if lum != LC: 
      ids.add(lid) 

for line in nlinesl: 
    if line != '': 
     cols = line.strip().replace('\t','').split() 
     lid = int(cols[1]) 
     if lid in ids: 
      x = cols[2] 
      X.append(x)