2017-07-07 7 views
0

現在、特定の文字列を含むテキストファイルからすべての行を削除するコードがあります。ここにあります:行にいくつかの指定された文字列が含まれていると、テキストファイルから行を削除するPython

import os 
with open(r"oldfile") as f, open(r"workfile", "w") as working:  
    for line in f: 
     if "string1" not in line: 
      working.write(line) 
os.remove(r"oldfile") 
os.rename(r"workfile", r"oldfile")  

質問:私は他の文字列をどのように含めることができますか?つまり、ある行に "string1" またはという文字列 "string2"が含まれている場合は、その行を削除するようにスクリプトに伝えたいとします。このような文字列ごとに上記のコードを繰り返してもかまいませんが、それを書くにはもっと短く効率的な方法があると確信しています。
事前に感謝します!

+0

これは役立つかもしれないが:https://stackoverflow.com/質問/ 6531482 /どのようにチェックするかどうかを確認するためには、リストからの要素のpython – yinnonsanders

答えて

2

を持っており、それを使用するためには良いかもしれないと思う動作するはず?

def should_remove_line(line, stop_words): 
    return any([word in line for word in stop_words]) 

stop_words = ["string1", "string2"] 
with open(r"oldfile") as f, open(r"workfile", "w") as working:  
for line in f: 
    if not should_remove_line(line, stop_words): 
     working.write(line)  
0
if "string1" in line or "string2" in line: 

これは私が

+0

更新、ええ、私は実行しようとしたが、この方法でのみ働いた。いくつの文字列がOPのチェックを必要とするかによって、人々が投稿した他のメソッドの中には、より良いものがあるかもしれません。 – J0hn

1

が関数に出て、それだけで抽象関数に

def contains(list_of_strings_to_check,line): 
    for string in list_of_strings_to_check: 
    if string in line: 
     return False 
    return True 

list_of_strings = ["string1","string2",...] 
... 
for line in f: 
     if contains(list_of_strings,line): 
0

あなたのブラックリストに載せられた文字列のリストをループブラックリストに載せられた文字列のいずれかが、このような存在した場合のトラックを保持したままにすることができます

import os 
blacklist = ["string1", "string2"] 
with open(r"oldfile") as f, open(r"workfile", "w") as working:  
    for line in f: 
     write = True 
     for string in blacklist: 
      if string in line: 
       write = False 
       break 
     if write: 
       working.write(line) 
os.remove(r"oldfile") 
os.rename(r"workfile", r"oldfile") 
関連する問題