gpt4 book ai didi

python - 在python项目中使用相对路径读取文件

转载 作者:IT老高 更新时间:2023-10-28 21:42:01 27 4
gpt4 key购买 nike

假设我有一个结构如下的 python 项目:

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

__init__.py:

from .module import test

module.py:

import csv

with open("..data/test.csv") as f:
test = [line for line in csv.reader(f)]

main.py:

import package

print(package.test)

当我运行 main.py 时出现以下错误:

 C:\Users\Patrick\Desktop\project>python main.py
Traceback (most recent call last):
File "main.py", line 1, in <module>
import package
File "C:\Users\Patrick\Desktop\project\package\__init__.py", line 1, in <module>
from .module import test
File "C:\Users\Patrick\Desktop\project\package\module.py", line 3, in <module>
with open("../data/test.csv") as f:
FileNotFoundError: [Errno 2] No such file or directory: '../data/test.csv'

但是,如果我从 package 目录运行 module.py ,则不会出现错误。因此,似乎 open(...) 中使用的相对路径仅与运行原始文件的位置相关(即 __name__ == "__main__") ?我不想使用绝对路径。有什么方法可以解决这个问题?

最佳答案

相对路径是相对于 current working directory .如果你不希望你的路径是,它必须是绝对的。

但是有一个常用的技巧可以从当前脚本构建绝对路径:使用它的 __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 模块)。

如果您仍需要支持旧版本,您可以通过以下方式获得相同的结果:

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))

[2020 年编辑:python3.4+ 现在应该是常态,所以我首先移动了受 jpyams 评论启发的 pathlib 版本]

关于python - 在python项目中使用相对路径读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40416072/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com