2013-06-25 39 views
1

我想解析list.txt中的每一行,如果在change_list中沒有任何更改(數字),刪除整個條目(不只是那個號碼),並用餘下的號碼創建一個新文件OUTPUT.txt刪除一個完整的行,如果行中的一個條目不存在一個列表

在下面的示例中,在change_list中不存在350166,因此整行「350882 348521 350166」被刪除,並且只有剩餘的一行被添加到output.txt

由於某種原因,我似乎沒有得到所需的outupt。任何人都可以指出哪裏出了問題?

change_list=[] 
def changecheck(change) : 
    changelist=['355199','352470','346917','350882','348521'] 
    if change in changelist: 
     return 1 
    else: 
     return 0 


with open('list.txt', 'r') as f: 
    for line in f : 
     line=line.strip() 
     change_line = line 
    print "change_line" 
    print change_line 

for element in change_line: 
    change_list = element.split(' ') 
    for changeid in change_list: 
     print "changeid" 
     print changeid 
     returnVal = changecheck('changeId') 
     if returnVal == 1: 
      #write the whole line to a new file 
      with open('output.txt', 'r') as f: 
       f.writelines(element) 

文件:

list.txt 
350882 348521 350166 
346917 352470 
355199 

OUTPUT.txt 
346917 352470 
355199 
+0

你不需要使用1和0,你可以簡單地使用'如果變化的變更表:開放...' – Elazar

回答

2

讓你changecheck一個set,然後生成在輸入發電機分裂它成單獨的號碼,只有在文件中包含行那裏就行了所有號碼是在changecheck ...,如:

changelist = {'355199','352470','346917','350882','348521'} 

with open('input') as fin, open('output', 'w') as fout: 
    lines = (line.split() for line in fin) 
    valid = (' '.join(line) + '\n' for line in lines if all(el in changelist for el in line)) 
    fout.writelines(valid) 
+0

我覺得第m在這個問題上的一個錯誤點是'w''國旗。 – Elazar

+0

@Elazar好點;) –

相關問題