Python中os.walk用法使用小结
作者:RedmiUltra
os.walk()是Python中用于遍历目录树的强大函数,本文就来详细的介绍一下os.walk用法小结,感兴趣的可以了解一下
os.walk() 是 Python 中用于遍历目录树的强大函数。让我详细解释每个变量返回的信息和用法:
基本概念
root: 当前正在访问的目录路径dirs: 当前目录下的子目录列表files: 当前目录下的文件列表
示例目录结构
project/
├── log_2024_01.txt
├── config.ini
├── logs/
│ ├── system.log
│ ├── app.log
│ └── archive/
│ └── old_log.txt
└── data/
├── input.csv
└── output.csv
具体例子
import os
# 假设当前目录结构如上所示
log_dir_path = "./project"
for root, dirs, files in os.walk(log_dir_path):
print(f"当前目录: {root}")
print(f"子目录列表: {dirs}")
print(f"文件列表: {files}")
print("-" * 50)
第一次迭代
当前目录: ./project 子目录列表: ['logs', 'data'] # 当前目录下的子文件夹 文件列表: ['log_2024_01.txt', 'config.ini'] # 当前目录下的文件
第二次迭代
当前目录: ./project/logs 子目录列表: ['archive'] # logs文件夹下的子目录 文件列表: ['system.log', 'app.log'] # logs文件夹下的文件
第三次迭代
当前目录: ./project/logs/archive 子目录列表: [] # 没有子目录 文件列表: ['old_log.txt'] # archive文件夹下的文件
第四次迭代
当前目录: ./project/data 子目录列表: [] # 没有子目录 文件列表: ['input.csv', 'output.csv'] # data文件夹下的文件
实际应用示例
1. 查找特定文件
import os
for root, dirs, files in os.walk("."):
for file in files:
if file.endswith(".log"):
full_path = os.path.join(root, file)
print(f"找到日志文件: {full_path}")
2. 计算目录大小
import os
total_size = 0
for root, dirs, files in os.walk("."):
for file in files:
file_path = os.path.join(root, file)
total_size += os.path.getsize(file_path)
print(f"总大小: {total_size} 字节")
3. 遍历时排除特定目录
import os
exclude_dirs = ['.git', '__pycache__', 'node_modules']
for root, dirs, files in os.walk("."):
# 从 dirs 列表中移除要排除的目录
dirs[:] = [d for d in dirs if d not in exclude_dirs]
for file in files:
print(os.path.join(root, file))
4. 获取所有文件的完整路径
import os
all_files = []
for root, dirs, files in os.walk("/path/to/directory"):
for file in files:
full_path = os.path.join(root, file)
all_files.append(full_path)
print(f"找到 {len(all_files)} 个文件")
重要特性
默认是深度优先遍历(从上到下)
可以控制遍历方向:
# 自顶向下遍历(默认)
for root, dirs, files in os.walk(".", topdown=True):
pass
# 自底向上遍历
for root, dirs, files in os.walk(".", topdown=False):
pass
修改 dirs 会影响遍历:
for root, dirs, files in os.walk("."):
# 不遍历隐藏目录
dirs[:] = [d for d in dirs if not d.startswith('.')]
实际使用技巧
import os
class LogProcessor:
def __init__(self, log_dir_path):
self.log_dir_path = log_dir_path
def process_logs(self):
for root, dirs, files in os.walk(self.log_dir_path):
# 按日期处理日志
for file in files:
if file.endswith('.log'):
self._process_single_log(root, file)
def _process_single_log(self, directory, filename):
filepath = os.path.join(directory, filename)
# 处理日志文件的逻辑
print(f"处理: {filepath}")
# 使用示例
processor = LogProcessor("./logs")
processor.process_logs()
os.walk() 是一个非常实用的函数,特别适合需要递归处理文件系统的场景,比如日志分析、文件备份、批量重命名等任务。
到此这篇关于Python中os.walk用法使用小结的文章就介绍到这了,更多相关Python os.walk用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- python关于os.walk函数查找windows文件方式
- Python文件遍历os.walk()与os.listdir()使用及说明
- Python os.listdir与os.walk实现获取路径详解
- python 中 os.walk() 函数详解
- 详解python os.walk()方法的使用
- Python使用os.listdir和os.walk获取文件路径
- Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
- python 获取文件下所有文件或目录os.walk()的实例
- python使用os.listdir和os.walk获得文件的路径的方法
- python使用os模块的os.walk遍历文件夹示例
