2016-02-06 139 views
0

這可能是一個簡單的答案,但我真的新的說到Python。我已經給出了現有的代碼,並且我正在嘗試爲它創建一個配置文件,而之前它已將所有內容硬編碼。我想要一個default配置文件與源代碼一起使用,但是當程序第一次運行時,程序會在用戶的主目錄(例如〜/ .config)中創建一個配置文件的副本。這樣他們可以編輯他們的主目錄中的文件,而不是編輯源代碼。 (至少我已經被告知那是什麼是最好的。)我和語法和諸如此類的東西真的不好,但我知道它應該是這樣的:Python - 在用戶的主目錄中創建一個.ini或配置文件

try import ~/.config/cfg.ini 

如果文件不存在,進口defaultconfig創造除defaultconfig的副本~/.config稱爲cfg.ini(目錄〜/的.config就必須再創造過)

目前我只是config.py我的源代碼,然後我用導入的配置,和配置。(變量名)當我需要價值時。

我知道這是格式不好,抱歉。

回答

0

通常不能從Python中的不同目錄結構中導入源代碼。您應該使用configparser來讀取和寫入數據。

我把程序分成兩個文件,首先運行write_default_config.py來生成默認配置。然後,在每次調用main.py時,腳本檢查是否存在用戶配置文件,並在創建必要的文件夾後將其從源目錄複製過來。

write_default_config.py:

import configparser 

config = configparser.ConfigParser() 

config.add_section('section') 
config['section']['setting_1'] = "hello" 
config['section']['setting_2'] = "goodbye" 

with open("default_config.ini", 'w') as f: 
    config.write(f) 

main.py:

import os, shutil, configparser 

user_config_dir = os.path.expanduser("~") + "/.config/Nick_H" 
user_config = user_config_dir + "/user_config.ini" 

if not os.path.isfile(user_config): 
    os.makedirs(user_config_dir, exist_ok=True) 
    shutil.copyfile("default_config.ini", user_config) 

config = configparser.ConfigParser() 
config.read(user_config) 

print(config['section']['setting_1']) 
print(config['section']['setting_2']) 

你總是已經閱讀並使用部分寫入配置數據。如果你不覺得你需要部分,但這似乎是無法解決的,這是一件麻煩事。

我的例子寫了兩個字符串,然後打印它們只是爲了顯示事情的工作原理,您應該用自己的信息替換它。

+0

好的,謝謝,但這會在腳本的相同位置創建default_config.ini,對嗎?如果是這樣的話,這是沒有必要的,因爲我已經有一個配置文件在我的腳本相同的文件夾,並且工作正常。我非常肯定,使用其他更專業的軟件時,當您安裝它們或第一次運行它們時,它們會在主目錄中創建一個配置文件或文件夾。我想要做同樣的事情,因爲我們試圖阻止人們在源代碼所在的文件夾中修改內容。 –

+0

如果您不想使用'configparser',然後選擇用於複製文件和創建文件夾的代碼,然後修改代碼以始終從用戶文件獲取其配置數據。不過,您仍然無法在位於源碼樹之外的文件上使用Python的「導入」。 –

相關問題