以Pythonic方式删除文件

时间:2015-05-28 11:50:25

标签: python-2.7

我想从文件系统中删除一些文件。我得到一个包含文件绝对路径的列表,逻辑是删除找到的文件并打印它们的名称。

我编写的逻辑如下,这将删除temp_list中找到的文件,但不会打印其名称。

log.info("Files removed [%s]", [os.remove(f) for f in temp_list if os.path.exists(f)])

输出为[None, None..]

我可以修改语句,以便删除文件,并在单个语句中打印删除的文件吗?

1 个答案:

答案 0 :(得分:2)

  

我可以修改语句,以便删除文件,并在单个语句中打印删除的文件吗?

是的,正如@jonrsharpe指出的那样,您可以将remove的实际调用放入列表理解的条件部分

log.info("Files removed [%s]", [f for f in temp_list if os.path.exists(f) and os.remove(f) is None])

然而,虽然这会删除并打印一行中的文件,但至少有两个原因,它不被视为“pythonic”或良好做法:

  1. 在列表推导中使用方法的副作用通常是不好的做法。如果您决定不再需要该日志语句并注释或删除该行,请考虑会发生什么!

  2. 在这种特殊情况下,列表理解的条件也是非常反直觉的,因为您需要通过remove否定“{1}}的”结果“使其”真实“。 {1}}或(甚至更糟)and os.remove(f) is None

  3. 相反,我建议你做这样的事情:

    and not os.remove(f)

    这可能是更多的代码行,但它更容易理解,因此可以被认为更“pythonic”。