Управление Python "с" контекстным менеджером с условным - PullRequest
0 голосов
/ 07 мая 2019

Может ли Python2.7 использовать условные выражения для управления контекстным менеджером "with"?Мой сценарий заключается в том, что если файл gzipped существует, я хочу добавить к нему, а если он не существует, я хочу записать в новый файл.Псевдокод:

with gzip.open(outfile, 'a+') if os.isfile(outfile) else with open(outfile, 'w') as outhandle:

Или ...

if os.isfile(outfile):
    with gzip.open(outfile, 'a+') as outhandle:
        # do stuff
else:
    with open(outfile, 'w') as outhandle:
        # do the same stuff

Я не хочу повторять "делать вещи", так как между ними будет то же самое.Но как я могу использовать условное для управления контекстом?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

Вы можете попробовать написать функцию для "do stuff"

def do_stuff():
    #do stuff here 

if os.isfile(outfile):
    with gzip.open(outfile, 'a+') as outhandle:
        do_stuff()
else:
    with open(outfile, 'w') as outhandle:
        do_stuff()
0 голосов
/ 30 мая 2019

Помните, что функции также можно назначать переменным

if os.isfile(outfile):
    open_function = gzip.open
    mode = 'a+'
else:
    open_function = open
    mode = 'w'

with open_function(outfile, mode) as outhandle:
    # do stuff
...