python读文件相对路径_在python项目中使用相对路径读取文件
假设我有一个python项目,结构如下:project/datatest.csv/package__init__.pymodule.pymain.py__init__.py:from .module import testmodule.py:import csvwith open("..data/test.csv") as f:test = [line for line in csv.reader
假设我有一个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
import package
File "C:\Users\Patrick\Desktop\project\package\__init__.py", line 1, in
from .module import test
File "C:\Users\Patrick\Desktop\project\package\module.py", line 3, in
with open("../data/test.csv") as f:
FileNotFoundError: [Errno 2] No such file or directory: '../data/test.csv'
但是,如果我从包目录运行module.py,我没有错误.所以open(…)中使用的相对路径似乎只与起始文件的运行位置相关(即__name__ ==“__ main__”)?我不想使用绝对路径.有什么方法可以解决这个问题?
解决方法:
相对路径相对于current working directory.
如果你不想要自己的道路,那一定是绝对的.
但是有一个常用的技巧来构建当前脚本的绝对路径:使用其__file__特殊属性:
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))
注意,从python 3.4开始,__ file__对于导入的模块始终是绝对的,您可以在此示例中删除os.path.abspath部分.并不是说它是绝对必要的,但如果你在某个时候改变当前的工作目录并且使用相对路径导入模块,它可以避免意外.
标签:python,python-3-x,io,python-import,relative-path
来源: https://codeday.me/bug/20190925/1817530.html
更多推荐



所有评论(0)