簡體   English   中英

如何從操作系統環境變量創建字典?

[英]How to create a dictionary from OS environment variables?

操作系統(macos)中設置了環境變量:

MYSQL_HOST="127.0.0.1"
MYSQL_DATABASE="invoice"
MYSQL_UID="dude"
MYSQL_PWD="pass1234"

我想建立一個名為db_config的列表,最終結果將如下所示:

db_config = {'host':"127.0.0.1", 'database':"invoice", 'user':"dude",
             'password':"pass1234"}

(請注意,環境變量名稱與db_config中的鍵不同db_config將用於傳遞數據庫連接憑據,並且鍵必須是上述db_config中列出的那些。)

我可以“手動”設置db_config使用:

db_config={'host':os.environ['MYSQL_HOST'], 'database':os.environ['MYSQL_DATABASE'],
           'user':os.environ['MYSQL_UID'], 'password':os.environ['MYSQL_PWD']}

...但似乎應該有一種更清潔、更 Pythonic 的方式來做到這一點,但我想不通。

config = {
    'host': 'MYSQL_HOST',
    'database': 'MYSQL_DATABASE',
    'user': 'MYSQL_UID',
    'password': 'MYSQL_PWD'
}
db_config = {k: os.environ.get(v) for k, v in config.items()}

根據您希望如何處理不在os.environ中的項目,您可以使用條件字典理解來忽略它們。

db_config = {k: os.environ.get(v) for k, v in config.items()
             if v in os.environ}

您可能希望在下面的代碼中重命名old_namenew_name 如果您確定環境變量將存在或要求它們可用於您的代碼正常工作,您可以刪除字典理解的if部分,如下所示:

import os

transformations = (
    ('MYSQL_HOST', 'host'),
    ('MYSQL_DATABASE', 'database'),
    ('MYSQL_UID', 'user'),
    ('MYSQL_PWD', 'password')
)

db_config = {
    new_name: os.environ[old_name]
    for old_name, new_name in transformations
    if old_name in os.environ
}

一個字典中與 MYSQL 相關的所有 ENV 變量

import os

keys = dict(os.environ).keys()

dic = {}
for key in keys:
    if 'MYSQL_' in key:
        dic.update({key.split('MYSQL_')[1]:os.environ.get(key)})

print(dic)      

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM