在处理文件和文件夹时,目录遍历是一个非常重要的技能。Python 提供了多种方法来遍历目录,无论是为了查找特定文件、统计文件大小,还是进行其他操作,目录遍历都是不可或缺的。下面,我将详细介绍如何在 Python 中进行目录遍历,并展示一些实用的例子。
1. 使用 os 模块遍历目录
Python 的标准库 os 提供了遍历目录的方法。下面是一些常用的函数:
1.1 os.listdir()
os.listdir() 函数用于获取指定目录下的所有文件和文件夹名。它返回一个列表,列表中的元素是目录下的所有项。
import os
# 假设有一个名为 'example' 的目录
files = os.listdir('example')
print(files)
1.2 os.walk()
os.walk() 函数是一个生成器,用于遍历目录树中的所有文件和文件夹。它返回一个三元组 (dirpath, dirnames, filenames),其中 dirpath 是当前正在遍历的目录路径,dirnames 是该目录下的所有子目录名,filenames 是该目录下的所有文件名。
import os
for dirpath, dirnames, filenames in os.walk('example'):
for filename in filenames:
print(os.path.join(dirpath, filename))
1.3 os.scandir()
os.scandir() 函数返回一个迭代器,可以用来遍历目录中的所有项。它比 os.listdir() 更高效,因为它会返回一个 os.DirEntry 对象,可以用来获取文件或目录的更多属性。
import os
for entry in os.scandir('example'):
if entry.is_file():
print(entry.path)
elif entry.is_dir():
print(entry.path)
2. 使用 pathlib 模块遍历目录
Python 3.4 引入了 pathlib 模块,这是一个面向对象的文件系统路径库。它提供了与 os 模块类似的功能,但更加直观和易于使用。
2.1 Path 对象的 iterdir() 方法
Path 对象有一个 iterdir() 方法,可以用来遍历目录中的所有项。
from pathlib import Path
for entry in Path('example').iterdir():
if entry.is_file():
print(entry)
elif entry.is_dir():
print(entry)
2.2 Path 对象的 rglob() 方法
Path 对象的 rglob() 方法可以用来递归地遍历目录树中的所有项。
from pathlib import Path
for entry in Path('example').rglob('*'):
if entry.is_file():
print(entry)
3. 实用例子
3.1 查找特定文件
假设你想要在目录中查找所有扩展名为 .txt 的文件,你可以使用以下代码:
import os
for root, dirs, files in os.walk('example'):
for file in files:
if file.endswith('.txt'):
print(os.path.join(root, file))
3.2 统计文件大小
如果你想统计目录中所有文件的总大小,可以使用以下代码:
import os
total_size = 0
for dirpath, dirnames, filenames in os.walk('example'):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
print(total_size)
通过以上内容,你应该已经掌握了在 Python 中进行目录遍历的基本方法。这些技能在处理文件和文件夹时非常有用,希望你能将这些知识应用到实际项目中。
