You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用os.walk避免手动指定子文件夹名优化CSV合并代码?

用os.walk替代手动罗列文件夹来批量读取并合并CSV文件

没问题,用os.walk完全可以实现自动遍历目标目录下的子文件夹,不用手动写那些日期文件夹名。我来给你拆解下思路和具体代码:

核心思路

os.walk会递归遍历指定目录的所有层级,每次返回三个值:当前目录路径、当前目录下的子文件夹列表、当前目录下的文件列表。我们可以利用它定位到所有目标子文件夹里的CSV文件,再批量读取合并。

考虑到你的需求是处理/Users/Name/Desktop/Datas/下的直接子文件夹(比如20170106这类日期文件夹),可以加个简单过滤:只处理根目录的第一级子文件夹,还能额外筛选出符合日期格式的文件夹,避免误读无关内容。

具体代码实现

import os
import glob
import pandas as pd

# 根目录,即你的Datas文件夹路径
root_dir = "/Users/Name/Desktop/Datas/"

# 初始化空列表,用来存放每个CSV文件读取后的DataFrame
df_list = []

# 遍历根目录下的所有内容
for dirpath, dirnames, filenames in os.walk(root_dir):
    # 只处理根目录的直接子文件夹(也就是目标日期文件夹)
    if os.path.dirname(dirpath) == root_dir:
        # 可选:过滤出以2017开头的文件夹,避免误处理其他无关文件夹
        if os.path.basename(dirpath).startswith("2017"):
            # 找到当前文件夹下所有CSV文件
            csv_files = glob.glob(os.path.join(dirpath, "*.csv"))
            # 逐个读取CSV并加入列表
            for csv_file in csv_files:
                df = pd.read_csv(csv_file)
                df_list.append(df)

# 合并所有DataFrame为最终结果
final_df = pd.concat(df_list, ignore_index=True)

代码关键点说明

  • os.walk(root_dir):从指定根目录开始遍历,每次循环返回当前目录的路径、子文件夹名、文件名。
  • os.path.dirname(dirpath) == root_dir:确保只处理根目录的直接子文件夹,不会递归进入更深层级(如果日期文件夹内还有子目录,可去掉此判断)。
  • startswith("2017"):安全过滤步骤,只处理2017开头的日期文件夹,防止读取到无关文件夹的CSV。
  • 用列表df_list存储每个CSV的DataFrame,最后一次性concat,比循环中反复合并的效率更高(文件数量多时更明显)。

如果你的Datas目录下只有目标日期文件夹,不需要过滤,直接去掉if os.path.basename(dirpath).startswith("2017"):这一行即可。

内容的提问来源于stack exchange,提问作者Dan_99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:44:12