跳转到主要内容

Python的文件系统抽象层

项目描述

PyFilesystem2

Python的文件系统抽象层。

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

文档

简介

将PyFilesystem的FS对象视为Python的file对象的下一步逻辑步骤。与文件对象抽象单个文件的方式相同,FS对象抽象整个文件系统。

让我们通过一个简单的示例来看看。以下函数使用PyFilesystem API来计算目录中Python代码的非空行数。它是递归的,因此它将在所有子目录中找到.py文件。

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

我们可以按照以下方式调用count_python_loc

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

代码行project_fs = open_fs('~/projects')打开一个FS对象,该对象映射到您家目录中的projects目录。该对象用于count_python_loc在计算代码行数时。

要计算zip文件中的Python代码行数,我们可以进行以下更改:

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

或者要计算FTP服务器上的Python代码行数:

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

无需对count_python_loc进行任何更改,因为PyFilesystem提供了一个简单一致的接口,用于任何类似于文件和目录集合的东西。本质上,它允许您编写与文件和目录的物理存储位置和方式无关的代码。

与纯使用标准库的版本相比:

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

此版本与上面的PyFilesystem代码类似,但仅适用于操作系统文件系统。任何其他文件系统都需要完全不同的API,并且您可能需要重新实现os.walk的目录遍历功能。

致谢

以下开发者为这个项目贡献了代码和时间:

有关贡献者完整列表,请参阅CONTRIBUTORS.md

PyFilesystem2对以下贡献代码和想法的原始版本的开发人员表示深深的感激。

  • Ryan Kelly
  • Andrew Scheller
  • Ben Timby

如果遗漏了任何人,请随时提醒我。

支持

如需商业支持,请联系Will McGugan

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于 安装包 的信息。

源代码分发

fs-2.4.16.tar.gz (187.4 kB 查看哈希值)

上传时间 源代码

构建分发

fs-2.4.16-py2.py3-none-any.whl (135.3 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面