如何使用python读取配置文件

How to read a config file using python

我有一个配置文件abc.txt,它看起来有点像:

1
2
3
path1 ="D:\test1\first"
path2 ="D:\test2\second"
path3 ="D:\test2\third"

我想从abc.txt中读取这些路径,以便在我的程序中使用它来避免硬编码。


为了使用我的示例,您的文件"abc.txt"需要如下所示:

1
2
3
4
[your-config]
path1 ="D:\test1\first"
path2 ="D:\test2\second"
path3 ="D:\test2\third"

然后,在您的软件中,您可以使用配置分析器:

1
import ConfigParser

然后在你的代码中:

1
2
3
 configParser = ConfigParser.RawConfigParser()  
 configFilePath = r'c:\abc.txt'
 configParser.read(configFilePath)

用例:

1
self.path = configParser.get('your-config', 'path1')

*编辑(@human.js)

在python 3中,configparser被重命名为configparser(如本文所述)。


您的文件中需要一个分区:

1
2
3
4
[My Section]
path1 = D:\test1\first
path2 = D:\test2\second
path3 = D:\test2\third

然后,读取属性:

1
2
3
4
5
6
7
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')


由于您的配置文件是普通文本文件,因此只需使用open函数读取即可:

1
2
3
4
5
6
file = open("abc.txt", 'r')
content = file.read()
paths = content.split("
"
) #split it into lines
for path in paths:
    print path.split(" =")[1]

这将打印您的路径。您也可以使用字典或列表来存储它们。

1
2
3
4
5
6
path_list = []
path_dict = {}
for path in paths:
    p = path.split(" =")
    path_list.append(p)[1]
    path_dict[p[0]] = p[1]

有关在此处读取/写入文件的详细信息。希望这有帮助!


这看起来像是有效的python代码,所以如果文件在项目的类路径上(而不是在其他目录或任意位置),一种方法就是将文件重命名为"abc.py",并使用import abc将其作为模块导入。以后甚至可以使用reload函数更新这些值。然后访问abc.path1等值。

当然,如果文件包含将要执行的其他代码,这可能很危险。我不会在任何真实的、专业的项目中使用它,但是对于一个小脚本或交互模式,这似乎是最简单的解决方案。

只需将abc.py放在与脚本相同的目录中,或打开交互shell的目录中,并执行import abcfrom abc import *操作。


如果需要以简单的方式从属性文件中的一个部分读取所有值:

您的config.properties文件布局:

1
2
3
[SECTION_NAME]  
key1 = value1  
key2 = value2

您的代码:

1
2
3
4
5
6
   import configparser

   config = configparser.RawConfigParser()
   config.read('path_to_config.properties file')

   details_dict = dict(config.items('SECTION_NAME'))

这将为您提供一个字典,其中键与配置文件中的键及其对应值相同。

details_dict为:

1
{'key1':'value1', 'key2':'value2'}

现在要获取key1的值:details_dict['key1']

把它全部放在一个只从配置文件读取该节一次的方法中(在程序运行期间第一次调用该方法)。

1
2
3
4
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

现在调用上述函数并获取所需键的值:

1
2
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

访问:

1
2
3
config_dict = get_config_section()

port = config_dict['DB']['port']

(此处"db"是配置文件中的节名"port"是"db"部分下的键。)