资源信息¶
资源信息(或 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
对象。