Python遍历目录树
os.walk()
是 Python 中 os
模块提供的一个用于递归遍历目录树的函数。它生成一个三元组 (dirpath, dirnames, filenames)
,分别包含当前目录路径、子目录列表和文件列表。os.walk()
非常适合用于文件系统操作,比如查找特定类型的文件、复制或删除文件等。
函数定义
os.walk(top, topdown=True, onerror=None, followlinks=False)
参数:
top
:必需参数,表示要遍历的目录的路径。topdown
:可选参数,布尔值。如果为True
(默认),则先遍历顶层目录,再遍历子目录。如果为False
,则先遍历子目录,再遍历顶层目录。onerror
:可选参数,如果指定,遇到错误时会调用该函数(通常是权限错误)。followlinks
:可选参数,布尔值。如果为True
,会跟随目录中的符号链接(软链接)。
返回值
os.walk()
返回一个生成器对象,每次迭代会生成一个 (dirpath, dirnames, filenames)
元组,其中:
dirpath
:当前遍历到的目录路径(字符串)。dirnames
:当前目录下的子目录名称列表。filenames
:当前目录下的文件名称列表。
>>> for foldername, subfolders, filenames in os.walk(Path.cwd()):
... print(f"----------当前目录:{foldername}----------")
... print(f"子文件夹是:{subfolders}")
... print(f"文 件 是:{filenames}")
...
----------当前目录:C:\Users\yx\Desktop\folderA----------
子文件夹是:['.git', '.venv', 'folderC', '__pycache__']
文 件 是:['.gitignore', '.python-version', 'a.txt', 'b.txt', 'helloworld.py', 'main.ipynb', 'main.py', 'mycats.py', 'mydata', 'pyproject.toml', 'README.md', 'uv.lock']
----------当前目录:C:\Users\yx\Desktop\folderA\.git----------
子文件夹是:['hooks', 'info', 'objects', 'refs']
文 件 是:['config', 'description', 'FETCH_HEAD', 'HEAD']
----------当前目录:C:\Users\yx\Desktop\folderA\.git\hooks----------
子文件夹是:[]
文 件 是:['applypatch-msg.sample', 'commit-msg.sample', 'fsmonitor-watchman.sample', 'post-update.sample', 'pre-applypatch.sample', 'pre-commit.sample', 'pre-merge-commit.sample', 'pre-push.sample', 'pre-rebase.sample', 'pre-receive.sample', 'prepare-commit-msg.sample', 'push-to-checkout.sample', 'sendemail-validate.sample', 'update.sample']
----------当前目录:C:\Users\yx\Desktop\folderA\.git\info----------
子文件夹是:[]
文 件 是:['exclude']
----------当前目录:C:\Users\yx\Desktop\folderA\.git\objects----------
子文件夹是:['info', 'pack']
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.git\objects\info----------
子文件夹是:[]
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.git\objects\pack----------
子文件夹是:[]
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.git\refs----------
子文件夹是:['heads', 'tags']
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.git\refs\heads----------
子文件夹是:[]
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.git\refs\tags----------
子文件夹是:[]
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.venv----------
子文件夹是:['Lib', 'Scripts']
文 件 是:['.gitignore', '.lock', 'CACHEDIR.TAG', 'pyvenv.cfg']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib----------
子文件夹是:['site-packages']
文 件 是:[]
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages----------
子文件夹是:['send2trash', 'Send2Trash-1.8.3.dist-info', '__pycache__']
文 件 是:['_virtualenv.pth', '_virtualenv.py']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\send2trash----------
子文件夹是:['mac', 'win', '__pycache__']
文 件 是:['compat.py', 'exceptions.py', 'plat_gio.py', 'plat_other.py', 'util.py', '__init__.py', '__main__.py']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\send2trash\mac----------
子文件夹是:[]
文 件 是:['legacy.py', 'modern.py', '__init__.py']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\send2trash\win----------
子文件夹是:['__pycache__']
文 件 是:['IFileOperationProgressSink.py', 'legacy.py', 'modern.py', '__init__.py']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\send2trash\win\__pycache__----------
子文件夹是:[]
文 件 是:['legacy.cpython-311.pyc', 'modern.cpython-311.pyc', '__init__.cpython-311.pyc']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\send2trash\__pycache__----------
子文件夹是:[]
文 件 是:['compat.cpython-311.pyc', 'exceptions.cpython-311.pyc', 'util.cpython-311.pyc', '__init__.cpython-311.pyc']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\Send2Trash-1.8.3.dist-info----------
子文件夹是:[]
文 件 是:['entry_points.txt', 'INSTALLER', 'LICENSE', 'METADATA', 'RECORD', 'REQUESTED', 'top_level.txt', 'WHEEL']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Lib\site-packages\__pycache__----------
子文件夹是:[]
文 件 是:['_virtualenv.cpython-311.pyc']
----------当前目录:C:\Users\yx\Desktop\folderA\.venv\Scripts----------
子文件夹是:[]
文 件 是:['activate', 'activate.bat', 'activate.csh', 'activate.fish', 'activate.nu', 'activate.ps1', 'activate_this.py', 'deactivate.bat', 'pydoc.bat', 'python.exe', 'pythonw.exe', 'send2trash.exe']
----------当前目录:C:\Users\yx\Desktop\folderA\folderC----------
子文件夹是:['folderD', 'folderE']
文 件 是:['a.txt', 'new_b.txt']
----------当前目录:C:\Users\yx\Desktop\folderA\folderC\folderD----------
子文件夹是:[]
文 件 是:['a.py', 'b.py']
----------当前目录:C:\Users\yx\Desktop\folderA\folderC\folderE----------
子文件夹是:['folderE1']
文 件 是:['c.py', 'd.py']
----------当前目录:C:\Users\yx\Desktop\folderA\folderC\folderE\folderE1----------
子文件夹是:[]
文 件 是:['f.py']
----------当前目录:C:\Users\yx\Desktop\folderA\__pycache__----------
子文件夹是:[]
文 件 是:['mycats.cpython-313.pyc']
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏