Python - 在用户的主目录中创建 .ini 或配置文件

Nic*_*k H 3 ini config python-2.7

这可能是一个简单的答案,但在谈到 Python 时我真的很陌生。我已经获得了现有代码,我正在尝试为它创建一个配置文件,而以前它对所有内容进行了硬编码。我想要一个default带有源代码的配置,但是当他们第一次运行它时,让程序在用户的主目录(例如 ~/.config)中创建该配置文件的副本。这样他们就可以在他们的主目录中编辑文件而不是编辑源代码。(至少有人告诉我这是最好的。)我对语法和诸如此类的东西真的很糟糕,但我知道它应该是这样的:

try import ~/.config/cfg.ini
Run Code Online (Sandbox Code Playgroud)

除非文件不存在,进口defaultconfig创造的defaultconfig称为副本cfg.ini~/.config(目录〜/的.config就必须再创建太)

目前我只有config.py我的源代码,然后在需要值时使用导入配置和 config.(variable name)。

我知道这格式不好,抱歉。

Har*_*ren 7

通常不可能从 Python 中的不同目录结构导入源代码。您应该使用 aconfigparser来读取和写入数据。

我把程序分成两个文件,首先你运行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)
Run Code Online (Sandbox Code Playgroud)

主要.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'])
Run Code Online (Sandbox Code Playgroud)

您始终可以使用部分读取和写入配置数据。如果您觉得不需要部分,这会很麻烦,但似乎没有办法绕过它。

我的例子写了两个字符串,然后打印它们只是为了展示事情是如何工作的,你应该用你自己的信息替换它。