在 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