2016-05-15 48 views
1

我正在嘗試這樣做:如果最後一列是1-5的負數,則將第二列和最後一列寫入文件「neg.txt」。如果最後一列是正數,則第二列和最後一列需要寫入「pos.txt」。執行後,我的兩個輸出文件都會變空。我不知道代碼有什麼問題,當我認爲如果聲明可以處理多個條件。我也嘗試過使用正則表達式,但它沒有工作,所以我儘可能簡單地查看哪些工作不正常。從最後一列的文件中分離列

輸入文件看起來是這樣的:

abandon  odustati   -2 
abandons  napusta  -2 
abandoned napusten -2 
absentee odsutne  -1 
absentees odsutni   -1 
aboard  na brodu  1 
abducted  otet  -2 
accepted   prihvaceno 1 

我的代碼是:

from urllib.request import urlopen 
import re 

pos=open('lek_pos.txt','w') 
neg=open('lek_neg.txt','w') 

allCondsAreOK1 = (parts[2]=='1' and parts[2]=='2' and 
      parts[2]=='3' and parts[2]=='4' and parts[2]=='5') 

allCondsAreOK2 = (parts[2]=='-1' and parts[2]=='-2' and 
      parts[2]=='-3' and parts[2]=='-4' and parts[2]=='-5') 

with open('leksicki_resursi.txt') as pos: 
    for line in pos: 
     parts=line.split() # split line into parts 
     if len(parts) > 1: # if at least 2 columns (parts) 
      if allCondsAreOK: 
       pos.write(parts[1]+parts[2]) 
      elif allCondsAreOK2: 
       neg.write(parts[1]+parts[2]) 
     else: 
      print("nothing matches") 
+0

我認爲你的條件應該使用或而不是AND如果零件是你的列 –

+0

如果我在這兩種情況下使用OR而不是AND,那麼只有負數的'lek_neg.txt'如果已滿,但是對於正數仍然是空的 –

+0

那是因爲你必須做內部的條件,而不是外部(不是在它之前) –

回答

1

你並不需要一個正則表達式,你只需要一個if/elif的檢查,如果在澆鑄後爲int最後一個值位於-5-1之間,如果它寫到負文件中,或者如果該值是寫入pos文件的任何非負數:

with open('leksicki_resursi.txt') as f, open('lek_pos.txt','w')as pos, open('lek_neg.txt','w') as neg: 
    for row in map(str.split, f): 
     a, b = row[1], int(row[-1]) 
     if b >= 0: 
      pos.write("{},{}\n".format(a, b)) 
     elif -5 <= b <= -1: 
      neg.write("{},{}\n".format(a, b)) 

如果正NUMS也必須是1-5之間,那麼你可以做一些類似的負面狀況的東西:

if 5 >= int(b) >= 0: 
     pos.write("{},{}\n".format(a, b)) 
    elif -5 <= int(b) <= -1: 
     neg.write("{},{}\n".format(a, b)) 

此外,如果你有空行,你可以過濾出來:

for row in filter(None,map(str.split, f)): 
+0

好的,這真的有幫助。謝謝!!! –

相關問題