python - 为什么使用map关闭多个文件时close方法未知?
问题描述
我有一个类似于以下的用例:
files = [open("foo1.pdf", "rb"), open("foo2.pdf", "rb"), open("foo3.pdf", "rb")]
# ... extract portions from the opened files using PyPDF2 and assemble a new PDF file
map(close, files)
为什么我在上面这样做?因为在使用 PyPDF2 将多个输入 PDF 文件合并到另一个文件中时,如果您关闭每个输入 PDF,您会在输出 PDF 中获得空白页面。输入文件必须保持打开状态,直到生成输出 PDF 文件,请参阅https://github.com/mstamy2/PyPDF2/issues/293
导致以下错误:
NameError: name 'close' is not defined
以下工作,但我想要不那么冗长的代码变体:
map(lambda file: file.close(), files)
我当然更喜欢以下内容:
map(close, files)
解决方案
因为close
is 本身不是一个函数,不像open
. 相反,它是类文件对象的方法。
如果你想以编程方式关闭文件,你可以close
使用对象本身来调用。
for x in files:
x.close()
如果您绝对想使用map
,您可以使用 lambda 函数来执行此操作,但我建议不要这样做,因为map
它定义了一个生成器,因此用户不清楚哪些文件已关闭,哪些文件已打开。
map(lambda x: x.close(), files)
推荐阅读
- apache-kafka - 如何跟踪谁在 Kafka 中发布了消息?
- r - 在数据帧替换中出错有 0 数据有 x
- r - 在 R 中跨多个列的线性模型
- java - 为 Realtime firebase 创建参考变量时出错
- java - 通过API获取java进程的RSS内存使用情况
- typescript - 保留“keyof T”信息的 Object.entries?
- r - 如何使用 mult 消除 data.table 中的重复项
- javascript - 用于检索 WIX 数据库 JSON 文件的 Excel 中的 API
- sas - 在 SAS 中,如何从值中删除小数点?
- makefile - 根据文件的年龄在 Makefile 中运行不同的代码