python3遍历文件夹和子文件夹中的所有文件

本文介绍使用Python3遍历指定文件夹及其子文件夹中所有.txt文件的方法。通过os模块的walk函数,可以轻松实现对文件系统的递归搜索。

本文介绍的是python3如何遍历指定文件夹及其子文件夹中的所有文件。

假设我想遍历一个test的文件夹中的所有文件,文件目录如下:

可以看到里面有四个文件,分别是r.txt, A.txt, A_1.txt, B.txt, 它们都分布在不同的子文件夹中。

以下是python代码:

import os

mydir = u'/Users/Desktop/test' # test的文件路径
for root,dirs,files in os.walk(mydir):
    for file in files: 
        if '.txt' in file: # 只查找txt文件
            print(os.path.join(root,file))

以下是运行的结果:

/Users/Desktop/test/r.txt
/Users/Desktop/test/dir_B/B.txt
/Users/Desktop/test/dir_A/A.txt
/Users/Desktop/test/dir_A/dir_A_1/A_1.txt

可以看到所有的文件都被遍历到了。

<think>我们被要求生成遍历文件夹及其文件夹中所有Excel工作簿的示例代码。根据引用[2]引用[3]的提示,我们可以使用os模块来遍历文件夹,然后使用pandas来读取每个Excel文件。但是,用户要求遍历文件夹,因此我们需要使用递归或者os.walk()函数。这里我们选择使用os.walk(),因为它可以遍历所有文件夹。步骤:1.导入必要的库:ospandas。2.指定要遍历的根文件夹路径。3.使用os.walk()遍历文件夹及其所有文件夹。4.对于每一个文件,检查其扩展名是否为.xlsx或.xls(或者其他Excel扩展名)。5.将每个Excel文件的完整路径保存到一个列表中。注意:用户可能只需要遍历的代码,不需要合并。但根据问题,用户要求的是“遍历”,所以我们可以先给出遍历的代码,然后如果需要,可以进一步处理(比如读取内容)。但是,用户的问题中提到了“所有Excel工作簿”,所以我们可能还需要打开每个工作簿?但问题没有明确要求读取内容,只是遍历并获取路径。因此,我们先提供获取所有Excel文件路径的代码。如果用户需要读取每个文件,我们可以再提供读取的示例。根据引用[2]的代码,他们使用pandas读取Excel,所以我们可以展示如何读取每个文件。然而,用户的问题中并没有要求合并,所以我们可以有两种方式:1.只遍历并打印文件路径。2.遍历并读取每个文件的内容(可能内存消耗大,如果文件很大)。我们先给出遍历并打印文件路径的示例,然后给出一个读取每个文件并合并到一个DataFrame的示例(可选,因为用户没有明确要求合并,但引用[2][3]都有合并)。考虑到用户的问题描述,他可能想要的是遍历的代码,至于后续操作(如合并)可以根据需要选择。因此,我们提供两个版本的代码:版本A:仅遍历并打印所有Excel文件的路径。版本B:遍历并读取所有Excel文件,然后合并到一个DataFrame(如果用户需要合并,可以参考,但注意内存)。但是用户的问题只要求遍历,所以我们以版本A为主,版本B作为可选扩展。另外,引用[3]的代码使用了Tkinter来选择文件夹,我们可以提供一个带图形界面选择文件夹的版本吗?但用户没有要求图形界面,所以我们可以作为可选。根据问题,我们主要提供命令行版本的遍历。代码结构:版本A(仅遍历):importosroot_folder="你的文件夹路径"forfoldername,subfolders,filenamesinos.walk(root_folder):forfilenameinfilenames:iffilename.endswith((&#39;.xlsx&#39;,&#39;.xls&#39;)):file_path=os.path.join(foldername,filename)print(file_path)版本B(遍历并合并):importosimportpandasaspdroot_folder="你的文件夹路径"all_data=pd.DataFrame()forfoldername,subfolders,filenamesinos.walk(root_folder):forfilenameinfilenames:iffilename.endswith((&#39;.xlsx&#39;,&#39;.xls&#39;)):file_path=os.path.join(foldername,filename)#使用pandas读取df=pd.read_excel(file_path)all_data=pd.concat([all_data,df],ignore_index=True)#然后可以保存合并后的文件但是,版本B可能会因为内存不足而失败,如果文件很大或者很多。所以需要谨慎。考虑到用户问题,我们主要提供版本A,然后说明如果需要合并可以参考版本B。另外,我们还可以提供一个函数,返回所有Excel文件的路径列表,这样用户可以根据需要处理。因此,我们给出一个函数,返回所有Excel文件的路径列表,并打印。代码示例:我们将编写一个函数:get_all_excel_files(root_folder),返回一个包含所有Excel文件完整路径的列表。然后,我们可以遍历这个列表并做进一步操作。下面我们给出代码:</think>以下是使用Python遍历文件夹及其文件夹中所有Excel工作簿的代码示例: ```python import os import pandas as pd def find_excel_files(root_dir): """查找所有Excel文件路径(支持.xlsx.xls格式)""" excel_files = [] # 遍历根目录及其所有目录 for foldername, subfolders, filenames in os.walk(root_dir): for filename in filenames: # 检查文件扩展名 if filename.lower().endswith((&#39;.xlsx&#39;, &#39;.xls&#39;)): file_path = os.path.join(foldername, filename) excel_files.append(file_path) return excel_files # 示例使用 if __name__ == "__main__": # 替换为您的目标文件夹路径 target_folder = "D:/您的文件夹路径" # 获取所有Excel文件 excel_list = find_excel_files(target_folder) # 打印结果 print(f"找到 {len(excel_list)} 个Excel文件:") for i, file_path in enumerate(excel_list, 1): print(f"{i}. {file_path}") # 可选:读取所有文件内容(内存充足时) all_data = pd.DataFrame() for file in excel_list: df = pd.read_excel(file) all_data = pd.concat([all_data, df], ignore_index=True) # 可选:保存合并结果 # all_data.to_excel("合并结果.xlsx", index=False) ``` ### 关键功能说明: 1. **递归遍历**: - 使用 `os.walk()` 深度遍历所有文件夹 - 自动识别 `.xlsx` `.xls` 格式文件 2. **路径处理**: - `os.path.join()` 构建完整文件路径 - 大小写不敏感的文件扩展名检测 3. **扩展功能**: - 返回文件路径列表供后续处理 - 可选的数据合并功能(使用pandas) - 文件计数路径打印 ### 注意事项: 1. 需要安装依赖库: ```bash pip install pandas openpyxl ``` 2. 内存管理: - 当处理大型Excel文件时,建议逐个处理而非一次性合并 - 可添加异常处理应对加密文件: ```python try: df = pd.read_excel(file) except Exception as e: print(f"读取失败 {file}: {str(e)}") ``` 3. 性能优化: - 添加扩展名过滤可提速:`if filename.endswith(...)` - 对于超大型目录,可考虑多线程处理 ### 应用场景: 1. 批量数据清洗/分析 2. 跨多文件报表汇总 3. 自动化数据归档系统 4. 文件完整性检查 > 示例参考了Python标准库`os`的文档[^1]pandas的Excel处理功能[^2],实际路径需替换为您的目标目录。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值