如何在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:使用相对路径访问文件夹
可以通过脚本所在目录构建相对路径,无需硬编码绝对路径,步骤如下:
- 用
os.path.dirname(os.path.abspath(__file__))获取当前脚本的所在目录 - 拼接目标子文件夹(比如和脚本同目录的
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
相关产品推荐
相关产品推荐

