从 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}}
我搜索这个问题的时候,看到的大多是如何从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}}