资源信息

资源信息(或 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() 。 例如,以下检索文件的 details 和 access 命名空间:

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_time , created_time 等)可以是 None 。如果文件系统无法检索资源类型, size 和 type 键保证可用,虽然 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 对象。