如何避免在enumerate循环中手动编写A-K子文件夹名称列表?
自动遍历子文件夹合并CSV文件的优化方案
看起来你已经搞定了手动指定文件夹合并CSV的逻辑,现在想摆脱手动写文件夹列表的麻烦?这有两种实用的方法帮你自动获取目标子文件夹:
方法1:用os模块遍历目录
这是比较传统的路径处理方式,兼容性好,适合所有Python版本:
你可以用os.listdir()获取根目录下的所有条目,然后筛选出文件夹,再可选过滤出A-K的文件夹(如果你的Datas目录里还有其他无关文件夹的话)。修改后的代码如下:
import os import glob import pandas as pd # 根目录路径 root_folder = "/Users/Name/Desktop/Datas/" # 遍历根目录下的所有条目 for item in os.listdir(root_folder): item_path = os.path.join(root_folder, item) # 只处理文件夹 if os.path.isdir(item_path): # 可选:只保留A到K的文件夹(如果需要过滤的话) if item in [chr(c) for c in range(ord('A'), ord('K') + 1)]: # 读取当前文件夹下所有CSV csv_files = glob.glob(os.path.join(item_path, "*.csv")) # 合并CSV(先判断是否有文件,避免空文件夹报错) if csv_files: df = pd.concat((pd.read_csv(file) for file in csv_files), ignore_index=True) # 这里可以添加你后续的处理逻辑,比如保存合并后的文件 # df.to_csv(f"{item_path}/merged.csv", index=False)
如果你的Datas目录下只有A-K这些目标子文件夹,那可以直接删掉那个判断item in [...]的条件,直接遍历所有文件夹即可。
方法2:用pathlib模块(Python3.4+推荐)
pathlib是Python3.4以后官方推荐的路径处理库,代码更简洁直观,可读性更强:
from pathlib import Path import pandas as pd root_folder = Path("/Users/Name/Desktop/Datas/") # 遍历根目录下的所有子文件夹 for folder in root_folder.iterdir(): if folder.is_dir(): # 可选过滤A-K文件夹 if folder.name in [chr(c) for c in range(ord('A'), ord('K') + 1)]: # 获取当前文件夹下所有CSV文件 csv_files = list(folder.glob("*.csv")) if csv_files: df = pd.concat((pd.read_csv(file) for file in csv_files), ignore_index=True) # 后续处理逻辑 # df.to_csv(folder / "merged.csv", index=False)
额外小技巧
如果以后需要调整文件夹范围(比如从A到M),只需要修改range(ord('A'), ord('K') + 1)里的ord('K')为ord('M')就行,不用手动逐个修改文件夹名称,非常灵活。
内容的提问来源于stack exchange,提问作者Dan_99
相关产品推荐
相关产品推荐

