簡體   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