如何打开一堆文件(使用上下文管理)而不嵌套一堆缩进

时间:2016-04-15 21:35:14

标签: python python-3.x with-statement contextmanager

我有一些一次性使用的代码,从一个函数中提取,删除成千上万的目录及其内容。这很好,但我想知道我是否可以使用" open()as"在一堆文件上没有缩进和缩进和缩进......

with open(deleted_dirs, 'w') as out_removed:
    with open(unsuccessful_targets, 'w') as out_fail:
        with open(already_gone, 'w') as out_nowhere:
            for target in targets:
                try:
                    shutil.rmtree(target, ignore_errors=False, onerror=on_fail_rmtree)
                    print(target, file=out_removed)
                except FileNotFoundError:
                    print(target, file=out_nowhere)
                except PermissionError:
                    logger.warning('Permission Error: {}'.format(target))
                    print(target, file=out_fail)
return

这个问题确实涉及与python: create a "with" block on several context managers相同的主题。这两者应该联系在一起,但是有两件重要的事情使这个问题变得明显1)这个问题使用了使用上下文管理器的规范示例:" open(f)as fd:"与提及"锁定#34;可从上下文管理器获得的对象(显然相同但不那么明显),更重要的是2)勤奋的搜索未能提出先前的问题或其答案。 (可能由于'''''''''经理'作为穷人的绝对无处不在,这变得更加困难搜索字词,关键字" contextmanager"是不可取的。)

1 个答案:

答案 0 :(得分:3)

这很简单。打开三个文件进行写作的例子:

with open('file1', 'w') as f1, open('file2', 'w') as f2, open('file3', 'w') as f3:
    # do stuff