【问题标题】:What is python "RAII" idiom for a variable number of resources?可变数量资源的python“RAII”习语是什么?
【发布时间】:2012-01-28 01:11:44
【问题描述】:

在python中打开可变数量文件的“最佳”方法是什么?

如果事先不知道文件的数量,我无法理解如何使用“with”。

(从 RAII/C++ 传入)

【问题讨论】:

  • 我无法理解“事先不知道文件数量”可能意味着什么。你能解释一下这个打开(并保持打开)未知数量文件的算法吗?
  • 示例:一个脚本,它在命令行上获取可变数量的文件名,并将它们逐行交错到 stdout 。

标签: python file variables resources raii


【解决方案1】:

好吧,您可以定义自己的上下文管理器,它接受 (filename, mode) 对的列表并返回打开文件句柄的列表(然后在上下文管理器退出时关闭所有这些句柄)。

有关如何定义自己的上下文管理器的更多详细信息,请参阅 http://docs.python.org/reference/datamodel.html#context-managershttp://docs.python.org/library/contextlib.html

【讨论】:

  • 这完全符合要求。
  • 在您清楚地描述并重新阅读上下文管理器文档之后,这对我来说似乎非常明显 - 现在。所以感谢你对新手温柔!
  • 如果此答案满足您的需求,请通过单击旁边的复选标记的轮廓将其标记为已接受。谢谢!
【解决方案2】:

在 3.3 中,contextlib.ExitStack 现在可用于此类情况。以下是contextlib 文档中的一些示例代码:

with ExitStack() as stack:
    files = [stack.enter_context(open(fname)) for fname in filenames]
    # All opened files will automatically be closed at the end of
    # the with statement, even if attempts to open files later
    # in the list raise an exception

2.7 用户不走运。升级的另一个原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 2011-01-05
    • 1970-01-01
    • 2010-09-18
    • 2010-09-14
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多