如何用for循环遍历多文件夹读写CSV文件并指定非默认目录
搞定Python跨路径CSV处理与文件夹遍历的方案
我来帮你一步步实现这个需求,核心就是指定根路径+循环遍历目标文件夹,再结合CSV读写和计算逻辑就行。下面是具体的实现思路和完整代码示例:
1. 先明确根路径
首先你得知道包含Folder1到Folder8的父文件夹的绝对路径,比如这个父文件夹在D:/Data/MyFolders或者/home/user/data/ParentDir。把这个路径赋值给一个变量,后续所有路径都基于它来拼接,避免硬编码和跨平台问题。
2. 循环遍历Folder1到Folder8
用for循环生成1到8的数字,拼接成文件夹名称(比如Folder{num}),再用os.path.join()把根路径和文件夹名组合成完整的文件夹路径——这个方法会自动适配Windows和Linux的路径分隔符,非常省心。
3. 完整代码示例(带CSV处理逻辑)
下面是一个可直接参考的脚本,包含了路径指定、文件夹遍历、CSV读写、计算、结果保存的全流程,你可以根据自己的计算需求修改中间的处理逻辑:
import os import csv # -------------------------- # 第一步:指定包含Folder1-Folder8的父文件夹路径 # 替换成你实际的路径,比如 Windows: "D:/YourData/ParentFolder" 或 Linux/Mac: "/home/you/data/ParentDir" root_parent_path = "/path/to/your/parent/folder" # -------------------------- # 遍历Folder1到Folder8 for folder_num in range(1, 9): # range(1,9)会生成1-8的数字 folder_name = f"Folder{folder_num}" # 拼接当前文件夹的完整路径 folder_path = os.path.join(root_parent_path, folder_name) # 先检查文件夹是否存在,避免报错 if not os.path.exists(folder_path): print(f"警告:文件夹 {folder_name} 不存在,跳过...") continue # -------------------------- # 第二步:读取当前文件夹里的CSV文件(这里假设每个文件夹里有input.csv,你可以改成实际文件名) input_csv_path = os.path.join(folder_path, "input.csv") if not os.path.isfile(input_csv_path): print(f"警告:{folder_name} 中未找到input.csv,跳过...") continue # 读取CSV并存储数据(示例:读取所有行) csv_data = [] with open(input_csv_path, mode='r', newline='', encoding='utf-8') as input_file: reader = csv.reader(input_file) header = next(reader) # 获取表头 csv_data.append(header) for row in reader: csv_data.append(row) # -------------------------- # 第三步:执行你的运算/计算逻辑(这里举个简单例子:新增一列"总和",计算前两列数值的和) # 注意:如果你的CSV里是字符串类型的数值,要先转成int/float if len(csv_data) > 1: # 确保有数据行 # 给表头加新列 csv_data[0].append("总和") # 遍历每一行数据(跳过表头) for row in csv_data[1:]: try: # 假设前两列是数值类型,替换成你实际需要计算的列索引 num1 = float(row[0]) num2 = float(row[1]) total = num1 + num2 row.append(str(total)) except ValueError: row.append("无效数值") # -------------------------- # 第四步:生成新的CSV文件,保存到当前文件夹 output_csv_path = os.path.join(folder_path, "output.csv") with open(output_csv_path, mode='w', newline='', encoding='utf-8') as output_file: writer = csv.writer(output_file) writer.writerows(csv_data) print(f"{folder_name} 处理完成,已生成output.csv") print("所有文件夹处理完毕!")
关键细节说明
- 路径处理:全程用
os.path.join()拼接路径,不要手动写/或\,避免跨平台出错。 - 异常处理:加了文件夹和文件存在性检查,还有数值转换的异常捕获,避免脚本中途崩溃。
- 自定义逻辑:你可以把中间的计算部分替换成自己需要的运算——比如求平均值、统计频次、复杂公式计算等等。
内容的提问来源于stack exchange,提问作者Mikey9191
相关产品推荐
相关产品推荐

