”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么Python项目中的相对路径会导致文件未找到错误?

为什么Python项目中的相对路径会导致文件未找到错误?

发布于2024-11-07
浏览:832

Why Do Relative Paths in Python Projects Lead to File Not Found Errors?

在 Python 项目中使用相对路径访问文件

在 Python 项目中操作文件时,为了方便起见,通常使用相对路径。然而,它们的行为可能变得不明确,特别是在处理多级项目结构时。

考虑以下项目布局:

project
    /data
        test.csv
    /package
        __init__.py
        module.py
    main.py

Module module.py 尝试使用相对路径读取 ../data/test.csv 中的文件,但在运行 main.py 时,会出现错误,指示找不到该文件。这种明显的不一致源于这样一个事实:根据脚本的执行位置,相对路径的解析方式不同。

对于 __init__.py 和 module.py,路径是相对于包含这些的目录进行评估的文件。然而,对于 main.py 来说,路径是相对于它自己的位置的。

解决路径歧义

要解决这种歧义,可以使用绝对路径。或者,更优雅的方法是利用 Python 的 __file__ 属性:

from pathlib import Path

path = Path(__file__).parent / "../data/test.csv"

with path.open() as f:
    test = list(csv.reader(f))

此技巧依赖于 Python 3.4 pathlib 模块,并根据当前脚本的位置构造绝对路径。

支持较旧的 Python 版本

如果仍在使用低于 3.4 的 Python 版本,另一种方法是操作当前路径:

import csv
import os.path

my_path = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(my_path, "../data/test.csv")

with open(path) as f:
    test = list(csv.reader(f))

此方法结合了 os.path 函数以达到与基于 pathlib 的方法相同的结果。

最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3