>>> from env_helper import info; info()
页面更新时间: 2023-06-30 19:18:41
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-9-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
3.2. 使用 os
模块遍历目录树¶
os
模块中有一些工具可以用来进行文件访问与管理。这些功能目前可以使用
pathlib
模块替代,但在一些地方可能会看到。
这里有一个例子程序,针对目录树的遍历,使用了 os.walk()
函数:
>>> import os
>>>
>>> for folderName, subfolders, filenames in os.walk('/tmp/'):
>>> print('The current folder is ' + folderName)
>>>
>>> for subfolder in subfolders:
>>> print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
>>> for filename in filenames:
>>> print('FILE INSIDE ' + folderName + ': ' + filename)
>>>
>>> print('-' * 10)
The current folder is /tmp/
SUBFOLDER OF /tmp/: .font-unix
SUBFOLDER OF /tmp/: .ICE-unix
SUBFOLDER OF /tmp/: .XIM-unix
SUBFOLDER OF /tmp/: systemd-private-54f54cfd8d674fe3a380db88f52ee48b-jupyterhub.service-K5DGMw
SUBFOLDER OF /tmp/: systemd-private-54f54cfd8d674fe3a380db88f52ee48b-systemd-logind.service-deYF8o
SUBFOLDER OF /tmp/: systemd-private-54f54cfd8d674fe3a380db88f52ee48b-ModemManager.service-mdN7B2
SUBFOLDER OF /tmp/: .X11-unix
SUBFOLDER OF /tmp/: systemd-private-54f54cfd8d674fe3a380db88f52ee48b-chrony.service-CM629B
SUBFOLDER OF /tmp/: systemd-private-54f54cfd8d674fe3a380db88f52ee48b-apache2.service-CW9Tb8
FILE INSIDE /tmp/: aliyun_assist_service.sock
FILE INSIDE /tmp/: AliyunAssistClientSingleLock.lock
----------
The current folder is /tmp/.font-unix
----------
The current folder is /tmp/.ICE-unix
----------
The current folder is /tmp/.XIM-unix
----------
The current folder is /tmp/.X11-unix
----------
os.walk()
函数被传入一个字符串值,即一个文件夹的路径。 你可以在一个
for
循环语句中使用 os.walk()
函数, 遍历目录树,就像使用
range()
函数遍历一个范围的数字一样。 不像 range()
,
os.walk()
在循环的每次迭代中,返回3个值:
当前文件夹名称的字符串。
当前文件夹中子文件夹的字符串的列表。
当前文件夹中文件的字符串的列表。
所谓当前文件夹,是指 for
循环当前迭代的文件夹。
程序的当前工作目录,不会因为 os.walk()
而改变。
就像你可以在代码 for i in range(lO):
中选择变量名称 i
一样,你也可以选择前面列出来的3个字的变量名称。 我通常使用 foldemame
、 subfolders
和 filenames
。
因为 os.walk()
返回字符串的列表, 保存在 subfolder
和
filename
变量中, 所以你可以在它们自己的 for
循环中使用这些列表。 用你自己定制的代码,取代 print()
函数调用
(或者如果不需要,就删除 for
循环)。