Python的文件系统抽象层
项目描述
PyFilesystem2
Python的文件系统抽象层。
文档
简介
将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。
项目详情
下载文件
下载适合您平台的文件。如果您不确定该选择哪一个,请了解更多关于 安装包 的信息。
源代码分发
fs-2.4.16.tar.gz (187.4 kB 查看哈希值)
构建分发
fs-2.4.16-py2.py3-none-any.whl (135.3 kB 查看哈希值)
关闭
fs-2.4.16.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ae97c7d51213f4b70b6a958292530289090de3a7e15841e108fbe144f069d313 |
|
MD5 | 2c9dae3d52950407fe265c3576396c33 |
|
BLAKE2b-256 | 5da9af5bfd5a92592c16cdae5c04f68187a309be8a146b528eac3c6e30edbad2 |
关闭
fs-2.4.16-py2.py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 660064febbccda264ae0b6bace80a8d1be9e089e0a5eb2427b7d517f9a91545c |
|
MD5 | a3943b641699f1b97998cb96809dceff |
|
BLAKE2b-256 | b95ca3d95dc1ec6cdeb032d789b552ecc76effa3557ea9186e1566df6aac18df |