2016-06-27 4 views
0

どのようにこのファイルをクローズするか、ファイルが自動的に上記の文は1つのライナーであると私はwith声明を避けたかったwithパイソン近いファイル

lines = open(file_name).readlines() 

コンテキストマネージャのように閉じますん、しかし、今私はファイルを閉じることができないので、上記のステートメントは役に立たないと思う。

with open(file_name) as f: 
      ..... 
+1

ファイルは実行終了時(終了時)に閉じられます。手動でファイルを閉じるには: 'f = open(file_name); lines = f.readlines(); f.close() ' –

+1

答えは[docs](https://docs.python.org/3.5/library/functions.html#open)にあります。 – Maroun

+0

コンテキストマネージャのフォームを使用すると、ファイルが閉じたときに明示的になります。 – jonrsharpe

答えて

0

ます。これは、例外は途中で提起されている場合でも、ファイルが正しくそのスイートが終了した後に閉じられているという利点がありwith

を使用することができます。

with open(file_name, 'r') as readfile: 
    lines = readfile.readlines() 
2

あなたは、むしろwith声明よりも、自分の式でopen(filename)を使用し、独自の機能に文でラップし、式の中で、それを使用する傾向がある場合。あなたがしたい場合は、メモリフットプリントを削減するために発電機を使用することができます

def open_readlines_and_close(filename, *args, **kwargs): 
    with open(filename, *args, **kwargs) as file: 
     lines = file.readlines() 
    return lines 

lines = open_readlines_and_close(file_name) 
# apologies for the weird function name 

1
lines = (lambda f=open(file_name): [f.readlines(), f.close()][0])() 

しかし、これは非常に読み難くないため、非常にPythonicとはみなされません。