Только один "с открытым файлом как f", основанный на условном - PullRequest
0 голосов
/ 08 июня 2019

Я создаю функцию, которая должна открывать файлы двух типов (обычные текстовые файлы и файлы .gz)

Я хочу использовать условное выражение, поэтому я могу использовать только один "with open"вместо дублированного кода.

Это то, чего я действительно хочу достичь (но, очевидно, он не компилируется)

if ".gz" in f:  # gzipped version of the file, we need gzip.open
    with gzip.open(f, "rt") as file:
else:
    with open(f,"rt") as file: # normal open

for line in file: # processing of the lines of the file
    ...

Я хочу иметь возможность просто использовать один с открытымвместо того, чтобы создавать два оператора "with open" с двумя "for line in file"

Причина: я хочу использовать как можно меньше кода.

Как это можно сделать вПитонический путь?

1 Ответ

2 голосов
/ 08 июня 2019

Я бы сделал открытие следующим образом (назначьте open() или gzip.open() функции для переменной, основываясь на вашем имени файла):

import gzip

f = 'myfile.gz'
opener = open

if ".gz" in f:  # gzipped version of the file, we need gzip.open
    opener = gzip.open

with opener(f, "rt") as file:
    pass # your code
...