繁体   English   中英

内置 open() function 中的 opener 参数有什么用?

[英]What is the use of opener argument in built-in open() function?

我正在玩 python 3.5 中的 open function。 我不明白打开 function 中 opener 参数(最后一个参数)的用法。根据 python 文档:可以通过将可调用对象作为 opener 传递来使用自定义 opener。

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

老实说,我从未在真正的Python代码中使用过opener参数...

一种可能的用法是使用需要特殊API的特殊文件系统 例如,您可以通过将整个文件保存在内存中并通过单个操作对其进行读写来将顺序文件存储在数据库中。

过去是索引文件 ,即包含顺序流的文件,每个流都有一个名称。 在这种情况下,您可以使用自定义打开器透明地访问它。

我可以想象的最后一个示例是Windows NTFS文件系统中的 每个文件都有一个默认流,但可以具有任意数量的备用流。 特殊的打开器可用于透明地访问文件上的备用流,或在打开或关闭时将特殊的元数据存储在特定的备用流上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM