2016-06-27 2 views
0

Как закрыть этот файл или же файл автоматически закрывается как менеджер контекста withпитона закрыть файл автоматически, как менеджер контекста

lines = open(file_name).readlines() 

Я хотел избежать with заявления как приведенное выше утверждение является один лайнером, но теперь я вижу, что вышеупомянутое заявление бесполезно, так как мы не можем закрыть файл.

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

Файл будет закрыт в конце выполнения (при прекращении). Чтобы закрыть файл вручную: 'f = open (имя_файла); 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

, если вы склонны использовать open(filename) в выражениях, а не with заявления, оберните с утверждением в своей собственной функции, и использовать его в выражении.

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, потому что оно не очень читаемо.

Смежные вопросы