【问题标题】:Best way to specify path of file for different uses without having to write a custom path for each one为不同用途指定文件路径的最佳方法,而无需为每个用途编写自定义路径
【发布时间】:2020-10-07 05:51:45
【问题描述】:

我有一个文件 (dataset.json),需要从不同的地方访问(tests.py、相对导入和实际使用)。我目前有一个类似这样的文件结构:

project_dir
    |
    + - module_1
        |
        + - __init__.py
        + - abcd.py
        + - dataset.json
    + - xyz.py
    + - tests
        |
        + - tests_abcd.py

我试图解决的问题是能够从abcd.py 读取dataset.json。当我从xyz.pytests_abcd.py 导入abcd.py 时,我得到一个FileNotFoundError,因为路径不同。

我已经了解了从 article 读取该文件的不同方法,但这并不一定能解决我的问题。我也研究了这个article。这个SO post 很有帮助,但并没有完全解决问题。

定义文件路径的最佳方法是什么?我不想为每个用例编写 50 种不同的方式来访问此文件,我想了解处理此类问题的最佳方式是什么。

【问题讨论】:

  • 在每个文件夹级别创建一个空的 init.py 文件,现在您可以尝试从 project_dir.module_1.dataset.json 导入
  • 这行不通,因为运行 python xyz.py 会导致 abcd 在 project_dir 而不是 module_1 中搜索

标签: python pytest


【解决方案1】:

内部abcd.py

from pathlib import Path
import json


def read_data():
    with open(Path(__file__).parent / 'dataset.json') as f:
        return json.load(f)

来自xyz.py

from module_1.abcd import read_data

my_data = read_data()

或者类似的东西,当然你不必返回数据,你可以在abcd.py中使用它。

__file__ 对评估它的脚本来说是本地的,因此xyz.py 有自己的路径,您可以通过在文件名前加上相同的父路径来打开它旁边的 .json。

【讨论】:

  • 要去睡觉了,我早上再看看这个。现在是凌晨 3 点:p
猜你喜欢
  • 2017-01-10
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多