跨目录调用含相对路径依赖的Python类时出现文件找不到错误
解决Python类中相对路径调用文件的问题
问题根源
你写的./geo_first_division相对路径,Python会以**运行app.py时的工作目录(也就是app_folder)**为基准查找文件,而不是class_geo.py所在的classes_folder目录,自然找不到目标文件夹。
可行解决方案
方法1:基于类文件目录构建路径(推荐)
在class_geo.py里,先获取当前文件的绝对目录,再拼接目标文件夹路径,这样不管从哪个目录启动脚本都能准确定位文件:
import os class GeoClass: def fun1(self): # 获取当前类文件所在的绝对目录 class_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接目标文件夹路径 geo_folder = os.path.join(class_dir, 'geo_first_division') # 拼接具体geojson文件路径 geojson_file = os.path.join(geo_folder, '你的文件名.geojson') # 后续读取文件操作...
如果用Python 3.4及以上版本,用pathlib语法更简洁直观:
from pathlib import Path class GeoClass: def fun1(self): class_dir = Path(__file__).parent.resolve() geo_folder = class_dir / 'geo_first_division' geojson_file = geo_folder / '你的文件名.geojson' # 后续读取文件操作...
方法2:临时切换工作目录(不推荐)
在app.py开头添加代码,把工作目录切换到classes_folder:
import os # 假设classes_folder和app_folder在同一层级,根据实际目录结构调整路径 os.chdir('../classes_folder') # 再导入你的类 from class_geo import GeoClass
这种方法局限性强,如果app.py的其他功能依赖原工作目录,很容易引发新问题。
验证提示
- 先确认
geo_first_division文件夹确实和class_geo.py在同一目录下 - 可以在代码里打印拼接后的路径,检查是否和实际文件路径一致
内容的提问来源于stack exchange,提问作者Newbielp
相关产品推荐
相关产品推荐

