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

如何在Python中筛选特定CSV文件并使用相对路径访问文件夹?

问题1:匹配目标CSV文件并合并

你的glob匹配失效大概率是路径拼接时的分隔符问题,改用os.path.join能避免跨平台的路径格式错误,同时确保匹配模式准确。另外,你的合并逻辑存在误区——pd.merge用于关联不同数据集,而你需要的是将结构一致的CSV文件纵向堆叠,用pd.concat更合适。

修正后的代码:

import glob
import pandas as pd
import os

# 正确拼接路径,避免斜杠冲突
path = 'C:/Users/User1/Desktop/Test/2020/'
files = sorted(glob.glob(os.path.join(path, "BANK_NIFTY_5MINs*.csv")), reverse=True)

# 先检查是否匹配到文件
if not files:
    print("未找到符合规则的CSV文件")
else:
    # 读取所有目标文件并合并
    df_list = []
    for file in files:
        df = pd.read_csv(file)
        df_list.append(df)
    # 纵向合并(适用于所有CSV结构一致的场景)
    merged_df = pd.concat(df_list, ignore_index=True)
    
    # 如果确实需要按索引横向合并(比如每个文件对应不同指标列),修正原逻辑:
    # merged_df = pd.read_csv(files.pop())
    # while files:
    #     next_df = pd.read_csv(files.pop())
    #     merged_df = pd.merge(merged_df, next_df, left_index=True, right_index=True, how='outer')

若仍匹配不到文件,排查以下几点:

  • 确认目标文件夹2020中确实存在符合BANK_NIFTY_5MINs*.csv命名规则的文件
  • 检查文件名是否存在大小写差异(比如实际是小写bank_nifty,但你的匹配模式是大写)
  • 执行print(glob.glob(os.path.join(path, "*")))输出文件夹内所有文件,验证目标文件是否在列表中
问题2:使用相对路径访问文件夹

可以通过脚本所在目录构建相对路径,无需硬编码绝对路径,步骤如下:

  1. 用os.path.dirname(os.path.abspath(__file__))获取当前脚本的所在目录
  2. 拼接目标子文件夹(比如和脚本同目录的2020文件夹)

示例代码:

import os
import glob
import pandas as pd

# 获取脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接目标文件夹路径(假设2020文件夹和脚本在同一目录下)
target_dir = os.path.join(script_dir, "2020")

# 匹配目标CSV文件
files = sorted(glob.glob(os.path.join(target_dir, "BANK_NIFTY_5MINs*.csv")), reverse=True)

这样无论脚本在哪个系统的哪个路径下,只要2020文件夹和脚本同目录,就能正确访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 11:30:45