在 Python 项目中使用相对路径访问文件
在 Python 项目中操作文件时,为了方便起见,通常使用相对路径。然而,它们的行为可能变得不明确,特别是在处理多级项目结构时。
考虑以下项目布局:
project /data test.csv /package __init__.py module.py main.py
模块 module.py 尝试读取 . ./data/test.csv 使用相对路径,但是在运行 main.py 时,出现错误,指示找不到该文件。这种明显的不一致源于这样一个事实:根据脚本的执行位置,相对路径的解析方式不同。
对于 __init__.py 和 module.py,路径是相对于包含这些的目录进行评估的文件。然而,对于 main.py 来说,路径是相对于它自己的位置的。
解决路径歧义
要解决这种歧义,可以使用绝对路径。或者,更优雅的方法是利用 Python 的 __file__ 属性:
<code class="python">from pathlib import Path path = Path(__file__).parent / "../data/test.csv" with path.open() as f: test = list(csv.reader(f))</code>
此技巧依赖于 Python 3.4 pathlib 模块,并根据当前脚本的位置构造绝对路径。
支持较旧的 Python 版本
如果仍在使用低于 3.4 的 Python 版本,另一种方法涉及操作当前路径:
<code class="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))</code>
此方法将 os.path 函数结合到达到与基于 pathlib 的方法相同的结果。
以上是为什么Python项目中的相对路径会导致文件未找到错误?的详细内容。更多信息请关注PHP中文网其他相关文章!