我正在使用 python 3.5 中的 open 函数。我不明白 open 函数中 opener 参数(最后一个参数)的用法。根据 python 文档:可以通过传递可调用作为开启器来使用自定义开启器。
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
有人可以通过示例解释我为什么需要开场白吗?
请参阅文档此处。 他们给出的例子如下:
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
)。 您可以想象使用更复杂的逻辑根据文件类型来查找特定目录,或者根据文件名的前几个字符将大量文件分成目录结构,并编写一个特定的函数作为您的打开器来定位它们。 所有这些都将文件定位逻辑封装到一个函数中作为您的开启器。
opener 可用于创建默认所有权以外的文件 和权限:
def _dminopener(path: str, flags: int) -> int:
"""opener for open() rw-rw---- and adm (4) group"""
f = os.open(path, flags, mode=0o660)
os.chown(-1,4)
return f