2012-05-03 51 views
3

說我有一個名爲settings.py和它的內容如下:加載settings.py配置文件到一個字典

{ 
    "translate_tabs_to_spaces": True, 
    "word_wrap": "true", 
    "font_face": "Monaco", 
    "font_size": 14.0, 
    "highlight_line": True, 
    "ignored_packages": 
    [ 
     "" 
    ], 
    "what": ''' 
      This is python file, not json 
      ''' 
} 

我怎樣才能在我的主要的應用程序文件,把它變成一個字典所調用的設置app.py?

謝謝。

+2

爲什麼不使用JSON? Python有一個'json'模塊,它使解碼JSON數據非常容易。它還可以避免加載未經驗證的Python代碼的惡意副作用,這些代碼在某些答案的評論中已經提到。 – 2012-05-03 21:31:32

+0

@Michael因爲我想用'''...''' –

+0

你可以在這個問題上添加一個例子嗎? – 2012-05-03 21:48:18

回答

1

您可以使用ast.literal_eval()安全地執行此操作。

import ast 

data="""\ 
{ 
    "translate_tabs_to_spaces": True, 
    "word_wrap": "true", 
    "font_face": "Monaco", 
    "font_size": 14.0, 
    "highlight_line": True, 
    "ignored_packages": 
    [ 
     "" 
    ], 
    "what": ''' 
      This is python file, not json 
      ''' 
}\ 
""" 

print(ast.literal_eval(data)) 

給予我們:

{'what': '\n   This is python file, not json\n   ', 'font_size': 14.0, 'translate_tabs_to_spaces': True, 'font_face': 'Monaco', 'word_wrap': 'true', 'highlight_line': True, 'ignored_packages': ['']} 

編輯:

鑑於從表明他希望能夠在他的配置使用...ast.literal_eval()將提問者的新評論不是是合適的,因爲它不能處理橢圓。目前還不清楚這是否意味着什麼,對於被問到的問題這仍然是一個很好的答案。

原來提問人員正在討論三重引用的字符串,這是正確處理的。

+0

爲什麼我得到這個票子? –

+1

-1不需要字面評估,只需導入模塊並獲取所有python贈品 –

+0

我認爲你誤解了這個問題。該文件的名稱是'settings.py'。這是一個python文件,它聽起來像是作者寫的一個包的一部分。這不是來自未知用戶的隨機不可信文本。 – senderle

1

給設置的設置模塊在字典的名稱然後導入設置模塊插入模塊,並加載到一個變量像

import settings 
your_settings = settings.settings_dict 
+0

這個工作嗎?我沒有看到定義的settings_dict對象。 – 2012-05-03 21:23:41

+0

-1,這很危險 - 它可能包含惡意代碼。它還需要更改數據文件。 –

+0

如果你使用的是設置模塊,那麼它絕對是你寫的我猜 – cobie

3

爲什麼不名字典說settings並不僅僅是從設置導入.py例如

settings.py

settings = {} # fill with your data 

使用這樣

>>> from settings import settings 
>>> print settings 
{} 

替代解決方案是隻在設置模塊級別添加變量和直接使用它們,爲什麼你需要一個字典?例如

settings.py

translate_tabs_to_spaces = True 
# more settings 

使用這樣

>>> import settings 
>>> settings.translate_tabs_to_spaces 
True 
+0

-1,這是危險的 - 它可能包含惡意代碼。它還需要更改數據文件。 –

+2

@Lattyware真的,OP沒有告訴settings.py是如何創建的,可能它只是django中使用的設置文件 –

+0

爲什麼另一個downvote請解釋一下? –