ランキングに戻る

PyFilesystem/pyfilesystem2

Pythonpyfilesystem.org

Python's Filesystem abstraction layer

filesystempyfilesystempyfilesystem2pythonftptarzipfilesystem-library
スター成長
スター
2.1k
フォーク
188
週間成長
Issue
91
5001k1.5k2k
2023年1月2024年3月2025年5月2026年7月
成果物PyPIpip install pyfilesystem2
README

PyFilesystem2

Python's Filesystem abstraction layer.

PyPI version PyPI Downloads Build Status Windows Build Status Coverage Status Codacy Badge Docs

Documentation

Introduction

Think of PyFilesystem's FS objects as the next logical step to Python's file objects. In the same way that file objects abstract a single file, FS objects abstract an entire filesystem.

Let's look at a simple piece of code as an example. The following function uses the PyFilesystem API to count the number of non-blank lines of Python code in a directory. It works recursively, so it will find .py files in all sub-directories.

def count_python_loc(fs):
    """Count non-blank lines of Python code."""
    count = 0
    for path in fs.walk.files(filter=['*.py']):
        with fs.open(path) as python_file:
            count += sum(1 for line in python_file if line.strip())
    return count

We can call count_python_loc as follows:

from fs import open_fs
projects_fs = open_fs('~/projects')
print(count_python_loc(projects_fs))

The line project_fs = open_fs('~/projects') opens an FS object that maps to the projects directory in your home folder. That object is used by count_python_loc when counting lines of code.

To count the lines of Python code in a zip file, we can make the following change:

projects_fs = open_fs('zip://projects.zip')

Or to count the Python lines on an FTP server:

projects_fs = open_fs('ftp://ftp.example.org/projects')

No changes to count_python_loc are necessary, because PyFileystem provides a simple consistent interface to anything that resembles a collection of files and directories. Essentially, it allows you to write code that is independent of where and how the files are physically stored.

Contrast that with a version that purely uses the standard library:

def count_py_loc(path):
    count = 0
    for root, dirs, files in os.walk(path):
        for name in files:
            if name.endswith('.py'):
                with open(os.path.join(root, name), 'rt') as python_file:
                    count += sum(1 for line in python_file if line.strip())
    return count

This version is similar to the PyFilesystem code above, but would only work with the OS filesystem. Any other filesystem would require an entirely different API, and you would likely have to re-implement the directory walking functionality of os.walk.

Credits

The following developers have contributed code and their time to this projects:

See CONTRIBUTORS.md for a full list of contributors.

PyFilesystem2 owes a massive debt of gratitude to the following developers who contributed code and ideas to the original version.

  • Ryan Kelly
  • Andrew Scheller
  • Ben Timby

Apologies if I missed anyone, feel free to prompt me if your name is missing here.

Support

If commercial support is required, please contact Will McGugan.

関連リポジトリ
sharkdp/fd

A simple, fast and user-friendly alternative to 'find'

Rustcrates.ioApache License 2.0command-linetool
43.8k1.1k
sxyazi/yazi

💥 Blazing fast terminal file manager written in Rust, based on async I/O.

Rustcrates.ioMIT Licenseasyncioconcurrency
yazi-rs.github.io
40.6k945
rustfs/rustfs

🚀2.3x faster than MinIO for 4KB object payloads. RustFS is an open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.

Rustcrates.ioApache License 2.0bigdatacloud-native
rustfs.com/download/
30.1k1.3k
jarun/nnn

n³ The unorthodox terminal file manager

CBSD 2-Clause "Simplified" Licensefile-managerdisk-usage
21.7k811
yorukot/superfile

Pretty fancy and modern terminal file manager

GoGo ModulesMIT Licensebubbleteacli
superfile.dev
18.7k569
wting/autojump

A cd command that learns - easily navigate directories from the command line

PythonPyPIOtherautojumppython
16.9k709
muesli/duf

Disk Usage/Free Utility - a better 'df' alternative

GoGo ModulesOtherhacktoberfestdisk-space
15.2k466
juicedata/juicefs

JuiceFS is a distributed POSIX file system built on top of Redis and S3.

GoGo ModulesApache License 2.0filesystemcloud-native
juicefs.com
14.2k1.3k
thephpleague/flysystem

Abstraction for local and remote filesystems

PHPPackagistMIT Licensefilesystemphp
flysystem.thephpleague.com
13.6k860
paulmillr/chokidar

Minimal and efficient cross-platform file watching library

TypeScriptnpmMIT Licensewatch-filesfsevents
paulmillr.com
12.2k630
s3fs-fuse/s3fs-fuse

FUSE-based file system backed by Amazon S3

C++GNU General Public License v2.0fuses3
9.9k1.1k
jprichardson/node-fs-extra

Node.js: extra methods for the fs object like copy(), remove(), mkdirs()

JavaScriptnpmMIT Licensejavascriptnodejs
9.6k786