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

跨Windows与Linux平台用相对路径读取多CSV文件的问题

解决glob跨Windows/Linux平台路径兼容问题(多CSV文件读取场景)

我之前也踩过类似跨平台路径的坑,尤其是Windows下glob返回混合斜杠的情况,给你两个靠谱的解决方案:

方案1:使用pathlib(推荐,原生跨平台)

Python 3.4+自带的pathlib库是处理路径的终极方案,它原生支持跨平台路径转换,完全不用手动处理斜杠问题。直接用它的glob方法获取文件,返回的Path对象可以直接传给pandas,代码简洁又可靠:

from pathlib import Path
import pandas as pd

# 用正斜杠定义相对路径,pathlib会自动适配Windows/Linux的分隔符
data_directory = Path("./Data Set/UserIdToUrl/")
# 获取目录下所有CSV文件
all_csv_files = list(data_directory.glob("*.csv"))

np_array_list = []
for file_path in all_csv_files:
    # Path对象直接作为read_csv的参数,无需额外转换
    df = pd.read_csv(file_path, index_col=None, header=0)
    # 注意:pandas的as_matrix()已废弃,推荐用to_numpy()
    np_array_list.append(df.to_numpy())

这个方法的核心优势:

  • 自动适配操作系统的路径分隔符,Windows下返回反斜杠路径,Linux下返回正斜杠路径
  • Path对象自带很多实用方法(比如判断文件是否存在、获取文件扩展名等)
  • 无需手动拼接或处理路径,减少出错概率

方案2:兼容原有glob+os模块的写法

如果你不想改动太多现有代码,可以直接跳过os.path.normpath的处理——其实pandas内部已经能识别混合斜杠的路径,不需要额外转换。另外如果需要确保路径格式统一,可以用os.path.abspath把相对路径转成绝对路径,这样就不会出现前缀丢失的问题:

import os
import glob
import pandas as pd

# 依然用正斜杠定义路径
path = "./Data Set/UserIdToUrl/*.csv"
all_files = glob.glob(path)

np_array_list = []
for file_ in all_files:
    # 转成绝对路径,确保跨平台路径格式正确
    abs_file_path = os.path.abspath(file_)
    df = pd.read_csv(abs_file_path, index_col=None, header=0)
    np_array_list.append(df.to_numpy())

补充说明下:之前用os.path.normpath丢失前缀是因为它会简化路径,把./这类相对前缀去掉,但其实去掉后路径依然有效(相对于当前工作目录)。如果你的代码还是报错,可以先用os.getcwd()确认当前工作目录是否正确。

最后提醒:pandas的as_matrix()方法已经被废弃,建议换成to_numpy(),避免后续版本兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:01:45