如果行中的条目不存在,则删除完整的行

时间:2013-06-25 00:22:29

标签: python

我正在尝试解析list.txt中的每一行,如果change_list中没有任何更改(数字),请删除整个条目(不仅仅是该数字)并创建一个新文件OUTPUT.txt剩下的数字。

在下面的示例中,change_list中不存在350166,因此整行" 350882 348521 350166"已删除,只有其余的已添加到output.txt

出于某种原因,我似乎没有得到理想的结果。任何人都可以指出哪里出错了?

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 

1 个答案:

答案 0 :(得分: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)