繁体   English   中英

从 python 文件中读取变量

[英]read a variable from a python file

当我搜索这个问题时,我主要看到如何从 txt 文件或其他文件格式导入。 不是来自 python 文件。

我需要编写一个 function ( get_seeds() ),它接受string中的路径并从 that.py 文件中提取变量。 That.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...需要在 function 之外。

尝试使用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

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

如果你在./data/和./data/M060812_Yac128/中放了一个__init__.py文件(只是一个同名的空白文件),你可以from data.M060812_Yac128.seeds import seeds然后调用function。

这使得子文件夹 python 模块

目录结构:

在此处输入图像描述

种子.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)

Output:

{'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}}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM