我正在使用python 3.5中的open函数。我不了解open函数中opener参数(Last argument)的用法。根据python文档:通过传递一个callable作为开启者可以使用自定义开启器。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
有人可以借助一个例子向我解释为什么我需要开启者论证。
答案 0 :(得分:0)
请参阅文档here。他们给出的例子如下:
import os
dir_fd = os.open('somedir', os.O_RDONLY)
def opener(path, flags):
return os.open(path, flags, dir_fd=dir_fd)
with open('spamspam.txt', 'w', opener=opener) as f:
print('This will be written to somedir/spamspam.txt', file=f)
os.close(dir_fd) # don't leak a file descriptor
这个特殊示例的作用是创建一个开启者,它始终采用路径并将它们解释为相对于您选择的给定目录(somedir
)。您可以想象使用更复杂的逻辑来查看特定目录,具体取决于文件类型,或者根据文件名的前几个字符将大量文件分成目录结构,并将特定函数编写为将定位它们的开启器。所有这些都将文件定位逻辑封装到单个函数中作为开启者。
答案 1 :(得分:-1)
老实说,我从未在真正的Python代码中使用 opener 参数......
可能的用法是使用需要特殊API的特殊文件系统。例如,您可以将顺序文件存储在数据库中,方法是将整个文件保存在内存中,并在一次操作中读取和写入。
曾经有索引文件,即包含顺序流的文件,每个流都有一个名称。在这种情况下,您可以使用自定义开启工具透明地访问它。
我能想象的最后一个例子是Windows NTFS文件系统中的streams。每个文件都有一个默认流,但可以包含所需的备用流。可以使用特殊的开启工具来访问文件上的透明备用流,或者在打开或关闭时将特殊的元数据存储在特定的备用流中...