通常不能從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'])
你總是已經閱讀並使用部分寫入配置數據。如果你不覺得你需要部分,但這似乎是無法解決的,這是一件麻煩事。
我的例子寫了兩個字符串,然後打印它們只是爲了顯示事情的工作原理,您應該用自己的信息替換它。
好的,謝謝,但這會在腳本的相同位置創建default_config.ini,對嗎?如果是這樣的話,這是沒有必要的,因爲我已經有一個配置文件在我的腳本相同的文件夾,並且工作正常。我非常肯定,使用其他更專業的軟件時,當您安裝它們或第一次運行它們時,它們會在主目錄中創建一個配置文件或文件夾。我想要做同樣的事情,因爲我們試圖阻止人們在源代碼所在的文件夾中修改內容。 –
如果您不想使用'configparser',然後選擇用於複製文件和創建文件夾的代碼,然後修改代碼以始終從用戶文件獲取其配置數據。不過,您仍然無法在位於源碼樹之外的文件上使用Python的「導入」。 –