遍历文件树
项目描述
iterpath 允许您遍历文件树作为单个迭代器,迭代对象为 pathlib.Path,消除了需要组合 os.walk() 返回的列表,或者递归调用 Path.iterdir() 或 os.scandir() 的需要。除了标准的 os.walk() 选项外,该库还包括排序和过滤条目的选项。
安装
iterpath 需要 Python 3.7 或更高版本。只需使用 Python 3 的 pip 安装即可(您有 pip 吗?)
python3 -m pip install iterpath
示例
遍历此库的源代码仓库,跳过.git和test/data文件夹
>>> import os.path >>> from iterpath import iterpath >>> def filterer(dir_entry): ... if dir_entry.name == ".git": ... return False ... elif dir_entry.path == os.path.join(".", "test", "data"): ... return False ... else: ... return True ... >>> with iterpath(".", sort=True, filter_dirs=filterer) as ip: ... for p in ip: ... print(p) ... .github .github/workflows .github/workflows/test.yml .gitignore LICENSE MANIFEST.in README.rst TODO.md pyproject.toml setup.cfg src src/iterpath src/iterpath/__init__.py src/iterpath/__pycache__ src/iterpath/__pycache__/__init__.cpython-39.pyc src/iterpath/py.typed test test/test_iterpath.py tox.ini
API
iterpath模块提供了一个名为iterpath的单一函数
iterpath(dirpath: AnyStr | os.PathLike[AnyStr] = os.curdir, **kwargs) -> Iterpath[AnyStr]
以深度优先顺序遍历以dirpath(默认为当前目录)为根的文件树,将文件和目录作为pathlib.Path实例生成。
返回值既是迭代器也是上下文管理器。为了确保内部os.scandir()迭代器被正确关闭,完成时可以调用close()方法,或者像这样将其用作上下文管理器
with iterpath(...) as ip: for path in ip: ...
如果return_relative为真,生成的Path对象将相对于dirpath。如果return_relative为假(默认值)且dirpath是绝对路径,则生成的Path对象将是绝对的;否则,如果dirpath是相对路径,则Path对象将是相对的,并且将以dirpath作为前缀。
请注意,尽管iterpath()生成pathlib.Path对象,但它内部在os.DirEntry对象上操作,因此任何作为sort_key参数或作为过滤器/排除参数提供的函数都必须接受os.DirEntry实例。
关键字参数
- dirs: bool = True
是否在输出中包含目录
- topdown: bool = True
是否在目录内容之前(True)或之后(False)生成每个目录
- include_root: bool = False
是否将传递给iterpath()的dirpath参数包含在输出中
- followlinks: bool = False
是否将目录的符号链接视为目录
- return_relative: bool = False
如果为真,生成的路径将相对于dirpath
- onerror: Optional[Callable[[OSError], Any]] = None
指定在迭代目录时遇到OSError时要调用的函数。如果函数重新引发异常,则iterpath()中止;否则,它将继续下一个目录。默认情况下,忽略OSError异常。
- sort: bool = False
对每个目录中的条目进行排序。当False时,条目按os.scandir()返回的顺序生成。当True时,默认情况下,条目按文件名升序排序,但可以通过sort_key和sort_reverse参数进行更改。
- sort_key: Optional[Callable[[os.DirEntry[AnyStr]], _typeshed.SupportsLessThan]] = None
指定用于排序目录条目的自定义键函数。只有当sort为True时才有作用。
- sort_reverse: bool = False
以反向顺序排序目录条目。只有当sort为True时才有作用。
- filter: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定要应用于遇到的每个文件和目录的谓词;只有返回真值的那些文件和目录会被生成(对于目录,会进入其中)。
如果指定了filter,则指定filter_dirs或filter_files将是一个错误。
- filter_dirs: Optional[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定一个应用于所有遇到的目录的谓词;只有那些谓词返回真值的目录将被产生并进入
- filter_files: 可选[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定一个应用于所有遇到的文件的谓词;只有那些谓词返回真值的文件将被产生
- exclude: 可选[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定一个应用于所有遇到的文件和目录的谓词;只有那些谓词返回假值的文件和目录将被产生(对于目录,还将进入)
如果指定了 exclude,同时指定 exclude_dirs 或 exclude_files 将是一个错误。
- exclude_dirs: 可选[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定一个应用于所有遇到的目录的谓词;只有那些谓词返回假值的目录将被产生并进入
- exclude_files: 可选[Callable[[os.DirEntry[AnyStr]], Any]] = None
指定一个应用于所有遇到的文件的谓词;只有那些谓词返回假值的文件将被产生
如果同时设置了 filter 和 exclude,则给定条目只有在 filter 返回真值且 exclude 返回假值时才会被包含(即,排除优先于包含),同样适用于目录和文件特定的参数。
警告
如果 dirpath 是一个相对路径,在 iterpath() 进行中更改工作目录将导致错误,或者至少结果不准确。
将 followlinks 设置为 True 可能会导致无限递归,如果符号链接指向自己的父目录。
选择器
新版本 0.3.0
iterpath 还提供了一组“选择器”类和常量,用于轻松构造 filter 和 exclude 参数。选择器是可调用的,它们返回匹配给定标准的 DirEntry 的真值。
选择器甚至可以使用 | 运算符组合
# This only returns entries whose names end in ".txt" or equal "foo.png" or
# ".hidden":
iterpath(
dirpath,
filter=SelectGlob("*.txt") | SelectNames("foo.png", ".hidden")
)
# Exclude all dot-directories and VCS directories:
iterpath(dirpath, exclude_dirs=SELECT_DOTS | SELECT_VCS_DIRS)
选择器
class SelectNames(*names: AnyStr, case_sensitive: bool = True)
选择名称之一为 names 的 DirEntry。如果 case_sensitive 为 False,则检查不区分大小写。
class SelectGlob(pattern: AnyStr)
选择名称与给定文件glob模式匹配的 DirEntry
class SelectRegex(pattern: AnyStr | re.Pattern[AnyStr])
选择名称与给定正则表达式匹配的(使用 re.search())DirEntry
SELECT_DOTS
选择名称以点开头的 DirEntry
SELECT_VCS
选择与 SELECT_VCS_DIRS 或 SELECT_VCS_FILES 匹配的 DirEntry(见下文)
SELECT_VCS_DIRS
选择以下版本控制目录的名称: .git、.hg、_darcs、.bzr、.svn、_svn、CVS、RCS
SELECT_VCS_FILES
选择以下版本控制特定文件的名称: .gitattributes、.gitignore、.gitmodules、.mailmap、.hgignore、.hgsigs、.hgtags、.binaries、.boring、.bzrignore 和所有非空且以 ,v 结尾的文件名
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分发
构建分发
iterpath-0.4.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 47b899938fa3840774b9df91db2a90f7769bfc84b4e550ab814ab974fc12d772 |
|
MD5 | e30cfdb41a0986dc80a5a7f56f8b48a5 |
|
BLAKE2b-256 | 46bb37ec82f48d9297e64c130bcead60de512d128737ea7dc74aa206c4dd783b |
iterpath-0.4.0-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 7a7ac9199999a1ba52f179902d0778cad7cdeaa70247354060edcb2c29753738 |
|
MD5 | 638efe3d1d258da72c39a121c24c456d |
|
BLAKE2b-256 | f8c1fbe4efc05469d4088b0413952ab7213c9ef9ffe2b2626ce338e8bd37a232 |