Я создаю программное обеспечение, в котором я хочу принимать сжатые файлы. Поскольку файлы читаются/записываются везде, я создал служебную функцию для открытия файлов, которая обрабатывает открытие/закрытие для меня для некоторых типов сжатых файлов.
Пример кода:
def return_file_handle(input_file, open_mode="r"):
""" Handles compressed and uncompressed files. Accepts open modes r/w/w+ """
if input_file.endswith(".gz")
with gzip.open(input_file, open_mode) as gzipped_file_handle:
return gzipped_file_handle
Проблема в том, что при использовании этого кода дескриптор файла закрывается при возврате функции. Можно ли делать с with open
то, что я хочу, или мне нужно самому справляться с закрытием?
Добавьте это к приведенному выше коду, чтобы получить минимальный неработающий пример:
for line in return_file_handle(input_bed, "rb"):
print line
Создайте сжатый текстовый файл с помощью:
echo "hei\nder!" | gzip - > test.gz
Сообщение об ошибке:
Traceback (most recent call last):
File "check_bed_against_blacklist.py", line 26, in <module>
check_bed_against_blacklist("test.gz", "bla")
File "check_bed_against_blacklist.py", line 15, in check_bed_against_blacklist
for line in return_file_handle(input_bed, "r"):
ValueError: I/O operation on closed file.