python3中 fsspec 库 和 stat 库 详解
python3中 fsspec 库 和 stat 库详解
fsspec 库
fsspec 是一个用于统一文件系统接口的 Python 库,它提供了一个抽象层,使得用户可以以统一的方式访问本地文件系统、远程文件系统(如 S3、GCS、HDFS 等)以及其他存储后端。fsspec 的核心思想是通过一个通用的 API 来处理不同存储系统中的文件操作,从而简化代码并提高可移植性。
以下是 fsspec 的详细介绍和用法示例:
1 . 安装 fsspec
可以通过 pip 安装 fsspec:
pip install fsspec
如果需要支持特定的存储后端(如 S3、GCS 等),还需要安装相应的插件,例如:
pip install s3fs gcsfs
2 . 核心功能
fsspec 提供了以下核心功能:
统一的文件系统接口:通过 fsspec.filesystem() 创建文件系统对象。
文件操作:支持打开、读取、写入、删除、列出文件等操作。
支持多种存储后端:包括本地文件系统、S3、GCS、HDFS、HTTP、FTP 等。
3 . 使用示例
3.1 访问本地文件系统
import fsspec
# 创建本地文件系统对象
fs = fsspec.filesystem("file")
# 列出目录内容
files = fs.ls("/path/to/directory")
print("Files:", files)
# 读取文件内容
with fs.open("/path/to/file.txt", "r") as f:
content = f.read()
print("File content:", content)
3.2 访问 S3 文件系统
import fsspec
# 创建 S3 文件系统对象
fs = fsspec.filesystem("s3", anon=True) # anon=True 表示匿名访问
# 列出 S3 存储桶中的文件
files = fs.ls("my-bucket/my-prefix")
print("Files in S3:", files)
# 读取 S3 中的文件内容
with fs.open("my-bucket/my-prefix/my-file.txt", "r") as f:
content = f.read()
print("S3 file content:", content)
3.3 访问 GCS 文件系统
import fsspec
# 创建 GCS 文件系统对象
fs = fsspec.filesystem("gcs")
# 列出 GCS 存储桶中的文件
files = fs.ls("my-bucket/my-prefix")
print("Files in GCS:", files)
# 读取 GCS 中的文件内容
with fs.open("my-bucket/my-prefix/my-file.txt", "r") as f:
content = f.read()
print("GCS file content:", content)
3.4 访问 HDFS 文件系统
import fsspec
# 创建 HDFS 文件系统对象
fs = fsspec.filesystem("hdfs")
# 列出 HDFS 中的文件
files = fs.ls("/path/to/hdfs/directory")
print("Files in HDFS:", files)
# 读取 HDFS 中的文件内容
with fs.open("/path/to/hdfs/file.txt", "r") as f:
content = f.read()
print("HDFS file content:", content)
3.5 访问 HTTP 文件
import fsspec
# 创建 HTTP 文件系统对象
fs = fsspec.filesystem("http")
# 读取 HTTP 文件内容
with fs.open("https://example.com/file.txt", "r") as f:
content = f.read()
print("HTTP file content:", content)
4 . 常用 API
以下是 fsspec 的常用 API:
方法 | 功能 | 示例 |
---|---|---|
fs.ls(path) | 列出目录中的文件和子目录。 | files = fs.ls("/path/to/directory") |
fs.open(path, mode) | 打开文件并返回文件对象。 | with fs.open("/path/to/file.txt", "r") as f: ... |
fs.cat(path) | 读取文件内容。 | content = fs.cat("/path/to/file.txt") |
fs.put(src, dst) | 将本地文件上传到远程文件系统。 | fs.put("local.txt", "remote.txt") |
fs.get(src, dst) | 将远程文件下载到本地文件系统。 | fs.get("remote.txt", "local.txt") |
fs.rm(path) | 删除文件或目录。 | fs.rm("/path/to/file.txt") |
5 . 支持的存储后端
fsspec 支持多种存储后端,包括但不限于:
- 本地文件系统:file
- Amazon S3:s3
- Google Cloud Storage:gcs
- Hadoop HDFS:hdfs
- HTTP/HTTPS:http
- FTP:ftp
- 其他:abfs(Azure Blob Storage)、adl(Azure Data Lake)等。
stat 标准库模块
在 Python 中,stat 是一个标准库模块,用于解析文件或目录的状态信息。它通常与 os 模块一起使用,通过 os.stat() 获取文件的状态信息,然后使用 stat 模块解析这些信息。
以下是 stat 模块的详细介绍和用法示例:
1 .获取文件状态信息
使用 os.stat() 获取文件的状态信息,返回一个 os.stat_result 对象。
import os
# 获取文件状态信息
stat_info = os.stat("example.txt")
print("File stat info:", stat_info)
========================================
File stat info: os.stat_result(st_mode=33204, st_ino=123456, st_dev=2050, st_nlink=1, st_uid=1000, st_gid=1000, st_size=1024, st_atime=1698765432, st_mtime=1698765432, st_ctime=1698765432)
2 . 解析文件状态信息
stat 模块提供了常量和方法,用于解析 os.stat_result 对象中的信息。
常用常量
- stat.S_IFMT:文件类型掩码。
- stat.S_IFDIR:目录文件。
- stat.S_IFREG:普通文件。
- stat.S_IFLNK:符号链接。
- stat.S_IRWXU:文件所有者的权限(读、写、执行)。
- stat.S_IRUSR:文件所有者的读权限。
- stat.S_IWUSR:文件所有者的写权限。
- stat.S_IXUSR:文件所有者的执行权限。
常用方法
- stat.S_ISDIR(mode):检查是否为目录。
- stat.S_ISREG(mode):检查是否为普通文件。
- stat.S_ISLNK(mode):检查是否为符号链接。
3 . 示例代码
以下是一个完整的示例,展示如何使用 stat 模块解析文件状态信息:
import os
import stat
def print_file_info(file_path):
# 获取文件状态信息
stat_info = os.stat(file_path)
# 解析文件类型
mode = stat_info.st_mode
if stat.S_ISDIR(mode):
print(f"{file_path} is a directory.")
elif stat.S_ISREG(mode):
print(f"{file_path} is a regular file.")
elif stat.S_ISLNK(mode):
print(f"{file_path} is a symbolic link.")
else:
print(f"{file_path} is of unknown type.")
# 解析文件权限
print("File permissions:")
print(f" Owner read: {bool(mode & stat.S_IRUSR)}")
print(f" Owner write: {bool(mode & stat.S_IWUSR)}")
print(f" Owner execute: {bool(mode & stat.S_IXUSR)}")
print(f" Group read: {bool(mode & stat.S_IRGRP)}")
print(f" Group write: {bool(mode & stat.S_IWGRP)}")
print(f" Group execute: {bool(mode & stat.S_IXGRP)}")
print(f" Others read: {bool(mode & stat.S_IROTH)}")
print(f" Others write: {bool(mode & stat.S_IWOTH)}")
print(f" Others execute: {bool(mode & stat.S_IXOTH)}")
# 文件大小
print(f"File size: {stat_info.st_size} bytes")
# 文件时间信息
print(f"Last accessed time: {stat_info.st_atime}")
print(f"Last modified time: {stat_info.st_mtime}")
print(f"Creation time: {stat_info.st_ctime}")
# 示例:打印文件信息
print_file_info("example.txt")
==================================================
example.txt is a regular file.
File permissions:
Owner read: True
Owner write: True
Owner execute: False
Group read: True
Group write: False
Group execute: False
Others read: True
Others write: False
Others execute: False
File size: 1024 bytes
Last accessed time: 1698765432.0
Last modified time: 1698765432.0
Creation time: 1698765432.0
4 . 常用方法总结
方法 | 功能 | 示例 |
---|---|---|
stat.S_ISDIR(mode) | 检查是否为目录。 | if stat.S_ISDIR(mode): ... |
stat.S_ISREG(mode) | 检查是否为普通文件。 | if stat.S_ISREG(mode): ... |
stat.S_ISLNK(mode) | 检查是否为符号链接。 | if stat.S_ISLNK(mode): ... |
mode & stat.S_IRUSR | 检查文件所有者的读权限。 | if mode & stat.S_IRUSR: ... |
mode & stat.S_IWUSR | 检查文件所有者的写权限。 | if mode & stat.S_IWUSR: ... |
mode & stat.S_IXUSR | 检查文件所有者的执行权限。 | if mode & stat.S_IXUSR: ... |
5 . 总结
stat 模块提供了一种灵活的方式来解析文件状态信息,包括文件类型、权限、大小和时间戳等。它的主要特点包括:
提供常量和方法,方便解析文件状态信息。
与 os.stat() 结合使用,获取文件状态信息。