Python遍历目录,操作文件

本文介绍了一个Python脚本,该脚本能够递归地遍历指定目录下的所有.txt文件,并对每个文件执行命令行操作。具体步骤包括获取目录路径、递归遍历目录树、收集所有.txt文件的完整路径并执行特定命令。
#coding=utf-8
import os

def GetFileList(dir, fileList):
    newDir = dir
    files = os.listdir(dir);
    for file in files:
        newDir = os.path.join(dir,file)
        if os.path.isfile(newDir):
            fileList.append(newDir)
        elif os.path.isdir(newDir):
            GetFileList(newDir,fileList)
    return fileList

dirpath="/public/data/"
outpath="/public/home/sun/data/"
items = GetFileList(dirpath,[])

for item in items:
    if item.endswith(".txt"):
        name = item.split('/')[-1]    #split列表最后一个元素
        out_cmd = '命令行'
        os.popen(out_cmd)
        print "finished!"
<think>我们参考了用户提供的两个引用,它们都使用了`os.walk()`函数来遍历目录。 引用[1]中的代码定义了一个函数`get_all_files`,它使用`os.walk`遍历指定目录,并返回所有文件的完整路径列表。 引用[2]展示了另一种使用`os.walk`的方式,它分别打印了当前文件夹、子文件夹和文件的信息。 用户需求:查找使用Python遍历多层目录文件的方法。 根据上述引用,我们推荐使用`os.walk()`方法,因为它可以递归遍历目录树,处理多层目录。 步骤: 1. 导入os模块。 2. 使用os.walk(root_folder)来遍历指定目录。os.walk会返回一个三元组(root, dirs, files)的生成器: - root: 当前正在遍历目录路径。 - dirs: 当前目录下的子目录列表。 - files: 当前目录下的文件列表。 3. 对于每一个文件,我们可以使用os.path.join(root, file)来获取文件的绝对路径。 我们可以编写一个函数,返回多层目录下的所有文件路径列表。 代码示例: ```python import os def get_all_files(root_folder): file_list = [] # 存储所有文件路径的列表 # 遍历目录树 for root, dirs, files in os.walk(root_folder): for file in files: # 拼接文件完整路径 file_path = os.path.join(root, file) file_list.append(file_path) return file_list # 使用示例 if __name__ == '__main__': folder_path = r'D:\目标文件夹' # 替换为你的目标文件夹路径 all_files = get_all_files(folder_path) # 打印所有文件路径 for file in all_files: print(file) ``` 注意事项: - 使用原始字符串(前面加r)来表示Windows路径,以避免转义字符的问题。 - 如果目录结构很大,返回的列表可能会占用较多内存,可以考虑使用生成器(yield)来逐个返回文件路径。 如果需要节省内存,我们可以将上述函数改为生成器函数: ```python import os def iterate_all_files(root_folder): for root, dirs, files in os.walk(root_folder): for file in files: file_path = os.path.join(root, file) yield file_path # 使用示例 if __name__ == '__main__': folder_path = r'D:\目标文件夹' # 逐个获取文件路径并打印 for file_path in iterate_all_files(folder_path): print(file_path) ``` 这样,我们不需要一次性将所有的文件路径都存储在列表中,而是每次只生成一个文件路径,节省内存。 相关问题: 1. 如何只遍历特定类型的文件(例如,所有.txt文件)? 2. 如何排除某些目录文件? 3. 除了`os.walk()`,还有哪些方法可以遍历目录? </think>### Python遍历多层目录文件的方法 在Python遍历多层目录文件最常用的方法是使用`os.walk()`函数,它能递归遍历指定路径下的所有子目录文件。以下是完整实现: ```python import os def get_all_files(directory): """获取目录下所有文件的完整路径""" file_list = [] # 遍历目录树 (root: 当前路径, dirs: 子目录列表, files: 文件列表) for root, dirs, files in os.walk(directory): for file in files: # 拼接完整文件路径 file_path = os.path.join(root, file) file_list.append(file_path) return file_list # 使用示例 if __name__ == '__main__': target_dir = r'D:\目标文件夹' # 替换为你的目录路径 all_files = get_all_files(target_dir) print(f"找到 {len(all_files)} 个文件:") for file in all_files: print(file) ``` #### 方法说明: 1. **`os.walk(directory)`**: - 返回生成器,每次生成三元组 `(当前目录路径, 子目录列表, 文件列表)` - 自动递归所有子目录 - 处理符号链接和隐藏文件(需系统支持) 2. **路径处理**: - `os.path.join()` 自动处理不同操作系统的路径分隔符(Windows为`\`,Linux/macOS为`/`) - 原始字符串 `r'路径'` 避免转义字符问题 #### 高级用法: ```python # 过滤特定类型文件(示例:仅获取.jpg文件) jpg_files = [os.path.join(root, f) for root, _, files in os.walk(directory) for f in files if f.lower().endswith('.jpg')] # 排除特定目录(示例:跳过node_modules文件夹) for root, dirs, files in os.walk(directory): if 'node_modules' in dirs: dirs.remove('node_modules') # 修改dirs列表可控制遍历深度 # ...处理文件... ``` #### 替代方案: 1. **`pathlib`模块(Python 3.4+)**: ```python from pathlib import Path files = [str(p) for p in Path(directory).rglob('*') if p.is_file()] ``` 2. **`glob`模块(简单模式匹配)**: ```python import glob # 递归获取所有.txt文件 txt_files = glob.glob(f"{directory}/**/*.txt", recursive=True) ``` > **注意事项**: > - 需要文件读取权限,否则会引发`PermissionError` > - 超大目录建议使用生成器形式 (`yield`) 避免内存溢出 > - Windows路径建议使用原始字符串(如 `r"C:\目录"`)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值