跨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
相关产品推荐
相关产品推荐

