带条件的Python控件“with”上下文管理器

2024-07-03 06:48:45 发布

您现在位置:Python中文网/ 问答频道 /正文

Python2.7是否可以使用条件来控制“with”上下文管理器?我的场景是,如果gzip文件存在,我想附加到它,如果它不存在,我想写入一个新文件。伪代码是:

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

我不想重复“做事情”,因为他们之间是一样的。但是如何使用条件来控制上下文呢


Tags: 文件管理器ifosaswithopen条件
2条回答

你可以试着为“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()

记住,函数也可以分配给变量

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

相关问题 更多 >