假设我有一个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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐