从 python 文件中读取一个变量

read a variable from a python file

我搜索这个问题的时候,看到的大多是如何从txt文件或者其他文件格式导入。不是来自 python 文件。

我需要编写一个函数 (get_seeds()),它接受 string 中的路径并从该 .py 文件中提取一个变量。该 .py 文件应该只有一个名为 seeds.

的变量

鉴于:

路径=./data/M060812_Yac128/seeds.py

seeds = {
    "HLS1": {'X': 44, 'Y': 52},
    'HLS2A': {'X': 108, 'Y': 66},
    'HLS2B': {'X': 91, 'Y': 85},
    'FLS1': {'X': 56, 'Y': 39},
    'FLS2': {'X': 104, 'Y': 61},
    'BCC2': {'X': 68, 'Y': 69},
    'BCC2S2': {'X': 92, 'Y': 72},
    'mBC': {'X': 34, 'Y': 30}
}

get_seeds.py:

def get_seeds(path):
    Path = os.path.normpaath(path)
    from Path import seeds
    return seeds

这显然行不通...因为我假设 from...import... 需要在函数之外。

尝试使用 importlib.import_module 来导入模块名称是字符串的地方。此外,使用 sys.path 包含脚本所在文件夹的路径,以便您可以按名称导入它并在脚本中使用它

import os
import importlib

def get_seeds(path):
    Path = os.path.normpath(path)
    folders = Path.split('/') # create list of each folder component of the path
    folder_path = '/'.join(folders[:-1]) # remove the file from the path to specify path to the folder containing script
    sys.path.insert(1, folder_path) # add folder path to sys path so python can find module

    mod = importlib.import_module(folders[-1][:-3]) # get rid of .py extension and use only name of the script rather than entire path
    return mod.seeds

如果您的文件是静态的且未生成,这将起作用。如果您需要能够访问多个可以有任何名称的文件,这里有另一个答案会更好。

如果你在 ./data/ 和 ./data/M060812_Yac128/ 中放置一个 __init__.py 文件(只是一个具有该名称的空白文件) 你可以 from data.M060812_Yac128.seeds import seeds 然后调用函数。

这使得子文件夹 python 模块

目录结构:

seeds.py:

seeds = {
    "HLS1": {'X': 44, 'Y': 52},
    'HLS2A': {'X': 108, 'Y': 66},
    'HLS2B': {'X': 91, 'Y': 85},
    'FLS1': {'X': 56, 'Y': 39},
    'FLS2': {'X': 104, 'Y': 61},
    'BCC2': {'X': 68, 'Y': 69},
    'BCC2S2': {'X': 92, 'Y': 72},
    'mBC': {'X': 34, 'Y': 30}
}

主 python 文件:

from data.M060812_Yac128.seeds import seeds

print(seeds)

输出:

{'HLS1': {'X': 44, 'Y': 52}, 'HLS2A': {'X': 108, 'Y': 66}, 'HLS2B': {'X': 91, 'Y': 85}, 'FLS1': {'X': 56, 'Y': 39}, 'FLS2': {'X': 104, 'Y': 61}, 'BCC2': {'X': 68, 'Y': 69}, 'BCC2S2': {'X': 92, 'Y': 72}, 'mBC': {'X': 34, 'Y': 30}}