我有一个配置文件abc.txt
,看起来有点像:
path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"
我想从abc.txt
读取这些路径,以便在我的程序中使用它来避免硬编码。
答案 0 :(得分:64)
为了使用我的示例,您的文件“abc.txt”需要如下所示:
[your-config]
path1 = "D:\test1\first"
path2 = "D:\test2\second"
path3 = "D:\test2\third"
然后在您的软件中,您可以使用配置解析器:
import ConfigParser
然后在你的代码中:
configParser = ConfigParser.RawConfigParser()
configFilePath = r'c:\abc.txt'
configParser.read(configFilePath)
用例:
self.path = configParser.get('your-config', 'path1')
*编辑(@ human.js)
在python 3中,ConfigParser被重命名为configparser(as described here)
答案 1 :(得分:14)
您的文件中需要一个部分:
[My Section]
path1 = D:\test1\first
path2 = D:\test2\second
path3 = D:\test2\third
然后,阅读属性:
import ConfigParser
config = ConfigParser.ConfigParser()
config.readfp(open(r'abc.txt'))
path1 = config.get('My Section', 'path1')
path2 = config.get('My Section', 'path2')
path3 = config.get('My Section', 'path3')
答案 2 :(得分:1)
这看起来像有效的Python代码,所以如果文件在项目的类路径上(而不是在其他目录或任意位置),一种方法就是将文件重命名为“abc.py”并将其导入为一个模块,使用import abc
。您甚至可以稍后使用reload
功能更新值。然后访问值abc.path1
等。
当然,如果文件包含将要执行的其他代码,则此可能会很危险。我不会在任何真正的专业项目中使用它,但对于小脚本或交互模式,这似乎是最简单的解决方案。
只需将abc.py
放入与脚本相同的目录或打开交互式shell的目录中,然后执行import abc
或from abc import *
。
答案 3 :(得分:1)
由于您的配置文件是普通文本文件,因此只需使用open
函数读取它:
file = open("abc.txt", 'r')
content = file.read()
paths = content.split("\n") #split it into lines
for path in paths:
print path.split(" = ")[1]
这将打印您的路径。您还可以使用词典或列表存储它们。
path_list = []
path_dict = {}
for path in paths:
p = path.split(" = ")
path_list.append(p)[1]
path_dict[p[0]] = p[1]
有关读/写文件here的更多信息。 希望这有帮助!
答案 4 :(得分:0)
如果您需要以简单的方式读取属性文件中某个部分的所有值:
您的config.properties
文件布局:
[SECTION_NAME]
key1 = value1
key2 = value2
您编码:
import configparser
config = configparser.RawConfigParser()
config.read('path_to_config.properties file')
details_dict = dict(config.items('SECTION_NAME'))
这将为您提供一个字典,其中的键与配置文件中的键及其相应值相同。
details_dict
是:
{'key1':'value1', 'key2':'value2'}
现在获取key1的值:
details_dict['key1']
将所有内容放入仅从配置文件读取该部分一次的方法中(在程序运行期间首次调用该方法)。
def get_config_dict():
if not hasattr(get_config_dict, 'config_dict'):
get_config_dict.config_dict = dict(config.items('SECTION_NAME'))
return get_config_dict.config_dict
现在调用上面的函数并获取所需键的值:
config_details = get_config_dict()
key_1_value = config_details['key1']
扩展上述方法,自动逐节阅读,然后按节名和键名进行访问。
def get_config_section():
if not hasattr(get_config_section, 'section_dict'):
get_config_section.section_dict = dict()
for section in config.sections():
get_config_section.section_dict[section] = dict(config.items(section))
return get_config_section.section_dict
要访问:
config_dict = get_config_section()
port = config_dict['DB']['port']
(此处“ DB”是配置文件中的节名称 而“端口”是“数据库”部分下的键。)
答案 5 :(得分:0)
在您的情况下,一个方便的解决方案是将配置包含在名为的 yaml 文件中
**your_config_name.yml**
看起来像这样:
path1: "D:\test1\first"
path2: "D:\test2\second"
path3: "D:\test2\third"
在您的python代码中,您可以通过执行以下操作将配置参数加载到字典中:
import yaml
with open('your_config_name.yml') as stream:
config = yaml.safe_load(stream)
然后您可以访问例如字典中的 path1 像这样 config:
config['path1']
要导入 yaml,您首先必须像这样安装包:pip install pyyaml
到您选择的虚拟环境中。