Python3.9代码Mac正常但Win10无法识别同目录data内CSV的问询
跨平台路径读取失败排查方案
- 核心踩坑点1:路径拼接基准错误,不要依赖
Path.cwd()Path.cwd()返回的是程序启动时系统的当前工作目录,不是当前代码文件所在的目录。Mac上运行正常只是因为Mac版PyCharm默认自动把项目根目录设置为启动工作目录,刚好匹配你放data文件夹的位置;Win10下要么是PyCharm运行配置的工作目录没和项目路径同步,要么是后续双击启动程序时,工作目录会跳转到系统桌面、用户根目录等其他位置,哪怕pathlib自动把斜杠转成了Windows格式,拼出来的路径实际根本不指向你存CSV的文件夹。
正确的路径拼接逻辑要以当前代码文件的位置为基准,不受启动位置影响:
排查时可以加一行打印代码,在Win10下实际运行看真实路径:myfile = 'dbm.csv' # 获取当前代码文件的绝对路径,再定位到同目录下的data文件夹 current_code_dir = Path(__file__).resolve().parent csvFileObj = current_code_dir / 'data' / myfileprint(csvFileObj.resolve()),很多时候你以为的“路径没问题”只是脑补的格式正确,实际指向的位置根本没有目标文件。 - 核心踩坑点2:open操作未指定编码,被Win10默认编码坑
Win10下Python调用open()不手动指定编码时,默认会用系统本地的GBK编码读文件,而你用Excel导出的CSV是UTF-8格式,哪怕路径完全正确,也会因为编码不匹配触发解码错误,不少初学者会把这类异常当成“无法识别数据文件”。
修正时要给open显式指定兼容Excel导出的UTF-8编码:# 用utf-8-sig兼容Excel导出的带BOM头的UTF-8文件,避免第一列出现乱码 with open(csvFileObj, 'r', encoding='utf-8-sig') as datafile: dbx = list(csv.reader(datafile)) - 顺手修正原有代码的逻辑错误
原来的写法把Path对象传给with关键字当上下文管理器是没有实际作用的:Path本身不是打开的文件句柄,真正的文件句柄是内层open()生成的,原来的写法会导致文件句柄无法被自动回收,运行久了可能触发系统的文件数量限制。把open()的返回值直接放到with后管理,才是合规写法,也就是上一步给出的代码结构。
快速定位步骤:在Win10运行时临时加3行测试代码,直接区分是路径问题还是读取问题
print("当前运行的工作目录:", Path.cwd()) print("代码文件所在目录:", Path(__file__).resolve().parent) print("目标CSV文件是否存在:", csvFileObj.exists())如果输出的“文件是否存在”是False,就是路径拼接的问题;如果为True但报读取错误,就是编码的问题。
内容的提问来源于stack exchange,提问作者user15347951
相关产品推荐
相关产品推荐

