如何用Python仅处理多层目录中的dragon.csv文件?
仅处理所有dragon.csv文件的Python代码修改方案
问题背景
download目录下包含2019、2020、2021、2022四个年份文件夹,每个年份文件夹下有对应月份的子文件夹,每个月份文件夹内存在dragon.csv和kingdom.csv两个CSV文件。需要修改现有代码,实现仅处理所有dragon.csv文件的需求。
现有代码片段
初始导入与类定义
import os import pandas as pd import numpy as np path = 'download/2019' save_path = 'download' class Preprocess: def __init__(self, path, save_path): self.path = path self.save_path = save_path
数据处理与保存函数
def save_dataset(path, save_path): for dir in os.listdir(path): for file in os.listdir(os.path.join(path, dir)): if file[-3:] == 'csv': df = pd.read_csv(os.path.join(path, dir, file)) print(f'Reading data from {os.path.join(path, dir, file)}') print('Start Preprocessing...') df = preprocessing(df) print('Finished!') if not os.path.exists(os.path.join(save_path, dir)): os.makedirs(os.path.join(save_path, dir)) df.to_csv(os.path.join(save_path, dir, file), index=False) save_dataset(path, save_path)
修改方案
- 调整根路径:将
path从'download/2019'改为'download',遍历所有年份文件夹。 - 完善循环层级:增加年份文件夹的遍历层,覆盖完整的「年份-月份」目录结构。
- 精确筛选目标文件:将文件判断条件改为
file == 'dragon.csv',避免误处理其他CSV文件。 - 修正保存路径层级:保存时保留年份和月份的目录结构,确保处理后的文件存储路径与原路径对应。
修改后的完整代码
import os import pandas as pd import numpy as np # 修改根路径为download,遍历所有年份 path = 'download' save_path = 'download' class Preprocess: def __init__(self, path, save_path): self.path = path self.save_path = save_path # 假设preprocessing函数已提前定义(根据实际需求实现逻辑) def preprocessing(df): # 示例预处理逻辑,可根据实际需求修改 return df def save_dataset(path, save_path): # 第一层循环:遍历年份文件夹(2019-2022) for year_dir in os.listdir(path): year_path = os.path.join(path, year_dir) # 跳过非文件夹类型的项 if not os.path.isdir(year_path): continue # 第二层循环:遍历年份下的月份文件夹 for month_dir in os.listdir(year_path): month_path = os.path.join(year_path, month_dir) if not os.path.isdir(month_path): continue # 第三层循环:遍历月份文件夹下的文件 for file in os.listdir(month_path): # 仅处理dragon.csv文件 if file == 'dragon.csv': file_path = os.path.join(month_path, file) df = pd.read_csv(file_path) print(f'Reading data from {file_path}') print('Start Preprocessing...') df = preprocessing(df) print('Finished!') # 构建保存路径:save_path/年份/月份/dragon.csv save_dir = os.path.join(save_path, year_dir, month_dir) if not os.path.exists(save_dir): os.makedirs(save_dir) save_file_path = os.path.join(save_dir, file) df.to_csv(save_file_path, index=False) save_dataset(path, save_path)
内容的提问来源于stack exchange,提问作者Peter Park
相关产品推荐
相关产品推荐

