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() 结合使用,获取文件状态信息。

https://s3fs.readthedocs.io/en/latest/

posted @ 2025-03-20 11:38  michaelchengjl  阅读(188)  评论(0)    收藏  举报