2016-11-11 4 views
0

それぞれのファイルを繰り返し処理し、各行の空白をトリミングし、返された文字列が空であればその行を削除したいと思います。以下のリスト内の.strip()コールを重複しないようにする方法はありますか?それはパフォーマンス上重要ではありませんが、間違っていると感じます。実際にあなたが本当にしてもファイルを読むために気にしないはずですPythonでのリストの理解における重複関数呼び出しの回避

newlns = [i + "\n" for i in (line.strip() for ln in lns) if i] 

sub main(): 
    fname = "foo.txt" 
    lns = [] 

    with open(fname, 'r') as file: 
     lns = file.readlines() 

    newlns = [i.strip() + "\n" for i in lns if i.strip()] 
    #I want this to look like the following, which doesn't work: 
    #newlns = [y + "\n" for i in lns if i.strip() as y] 

    with open("out.txt", 'w') as file: 
     file.writelines(newlns) 

答えて

3

あなたは、ネストされたリストの内包表記(実際にリストを構築避けるために、この場合も、ジェネレータ式)を使用することができます最初に、そこに置くだけです。ファイルを繰り返し処理すると、その行が得られます。

with open(fname, 'r') as file: 
    newlns = [i + "\n" for i in (line.strip() for ln in file) if i] 
+0

私は.readlines()コールが必要ではないことを指摘してくれてありがとう! –

関連する問題