资源信息

资源信息(或 info )描述标准文件详细信息,例如名称,类型,大小等,以及潜在的其他不太常见的信息与文件或目录相关联。

您可以通过调用检索单个资源的资源信息 getinfo() ,或者通过调用 scandir() 它返回一个资源信息的迭代器的内容一个目录。 另外, filterdir() 可以在目录中按类型和通配符过滤资源。

以下是检索文件信息的示例:

>>> from fs.osfs import OSFS
>>> fs = OSFS('.')
>>> fs.settext('example.txt', 'Hello, World!')
>>> info = fs.getinfo('example.txt', namespaces=['details'])
>>> info.name
'example.txt'
>>> info.is_dir
False
>>> info.size
13

info 对象

PyFilesystem通过属性 Info 对象来公开资源信息。

命名空间

所有资源信息都包含在许多潜在的 命名空间 之中,这是逻辑 key/value 组。

你可以指定你感兴趣的命名空间作为位置参数 getinfo() 。 例如,以下检索文件的 detailsaccess 命名空间:

resource_info = fs.getinfo('myfile.txt', 'details', 'access')

除了指定的命名空间之外,文件系统还将返回包含资源名称的 basic 命名空间,以及指示资源是否为目录的标志。

基本命名空间

始终返回 basic 命名空间。 它包含以下键:

名字 类型 描述
name str 资源名称
is_dir bool 一个布尔值,指示资源是否为目录

通常可以非常快速地检索此命名空间中的键。在 OSFS 的情况下,可以检索命名空间而不需要可能昂贵的系统调用。

详细命名空间

details 命名空间包含以下键。

名字 类型 描述
accessed datetime 文件上次访问的时间
created datetime 文件创建的时间
metadata_changed datetime 元数据 (e.g 所有者,组)的时间最近更改时间
modified datetime 最近更改文件数据时间
size int 用于存储资源的字节数。对象是文件时表示文件数据字节数,如果是目录 size 是用于存储目录条目的开销(以字节为单位)
type ResourceType 资源类型,其定义在 ResourceType

如果文件系统不存储该信息,则时间值( accessible_timecreated_time 等)可以是 None 。如果文件系统无法检索资源类型, sizetype 键保证可用,虽然 type 可能是 unknown

访问命名空间

access 命名空间报告权限和所有权信息,并包含以下键。

名字 类型 描述
gid int 组ID
group str 组名
permissions Permissions 一个实例 Permissions ,它包含资源的权限
uid int 用户ID
user str 所有者的用户名

此命名空间是可选的,因为并非所有文件系统都具有所有权或权限的概念。 它支持 OSFS 。 如果文件系统不支持,某些值可能是 None

Stat命名空间

stat 命名空间包含调用 os.stat 报告的信息。 这个命名空间支持 OSFS 和可能的其他文件系统,它们直接映射到操作系统文件系统。 大多数其他文件系统将不支持此命名空间。

其他命名空间

某些文件系统可能支持本文未涉及的其他命名空间。 有关支持哪些命名空间的信息,请参阅特定文件系统的文档。

您可以使用 get() 方法检索这种实现特定的资源信息。

注解

请求文件系统不支持的命名空间(或命名空间)不是错误。 任何未知的命名空间将被忽略。

原始信息

Info 类是一个包含 原始信息 的简单数据结构的包装器。 您可以使用 info.raw 属性访问此原始信息。

注解

如果你打算自己实现一个文件系统,以下是可能只有兴趣。

原始信息数据包括将命名空间名称映射到信息字典的字典。 下面是一个例子:

{
    'access': {
        'group': 'staff',
        'permissions': ['g_r', 'o_r', 'u_r', 'u_w'],
        'user': 'will'
    },
    'basic': {
        'is_dir': False,
        'name': 'README.txt'
    },
    'details': {
        'accessed': 1474979730.0,
        'created': 1462266356.0,
        'metadata_changed': 1473071537.0,
        'modified': 1462266356.0,
        'size': 79,
        'type': 2
    }
}

原始资源信息仅包含基本类型(字符串,数字,列表,字典,None)。这使得资源信息简单地通过网络发送,因为它可以被简单地串行化为JSON或其他数据格式。

由于这个要求,时间被存储为 epoch times 。 Info对象将把这些对象转换为来自标准库的datetime对象。 此外,Info对象会将权限从一个字符串列表转换为一个 fs.permissions.Permissions 对象。