[英]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.