2015-12-29 1 views
1

Основываясь на том, что я прочитал в Интернете, следующее, кажется, пример чтения данных из двоичного файла, состоящий из целочисленных данных в Python:Нужно ли закрывать файл, используя open в python?

in_file = open('12345.bin', 'rb'); 
x = np.fromfile(in_file, dtype = 'int32'); 

В Matlab, я думаю, что соответствующая команда:

in_file = fopen('12345.bin', 'rb'); 
x = fread(in_file, 'int32'); 
fclose(in_file); 

В Matlab файл должен быть закрыт с использованием fclose после его окончания. Есть ли что-нибудь, что соответствует этому в NumPy?

+2

Аналога в питоне 'in_file.close()'. Однако, если вы забудете это сделать, python автоматически закроет файл, когда функция вернет – inspectorG4dget

+3

http://stackoverflow.com/questions/7395542/is-explicitly-closing-files-important –

+1

@ inspectorG4dget: CPython будет, но это а не языковая гарантия вообще (PyPy, Jython и IronPython могут обойти закрытие файла в какой-то момент, но не в предсказуемое время). – ShadowRanger

ответ

8

Питон эквивалент in_file.close(). Хотя всегда полезно закрыть любые открытые файлы, python немного более прощает - он автоматически закроет любые обработчики открытых файлов, когда ваша функция вернется (или когда ваш скрипт завершится, если вы откроете файл вне функции).

С другой стороны, если вы хотите с помощью вложенных отступов областей питона, то вы могли бы рассмотреть возможность сделать это (действительно, как питон 2.7):

with open('1234.bin', 'rb') as infile: 
    x = np.fromfile(infile, dtype='int32') 
# other stuff to do outside of the file opening scope 

EDIT: As @ShadowRanger pointed out CPython автоматически закроют файл обработчики в функции-return/end-of-script. Другие версии питона также будут делать это, хотя и не предсказуемым образом/время

1

Вам необходимо закрыть открытый файл:

f=open('file') 
f.close()