如何在Python中读取属性文件?
时间:2020-02-23 14:43:13 来源:igfitidea点击:
我们可以使用jproperties
模块来读取Python中的属性文件。
属性文件在每一行中都包含键/值对。
等于(=)作为键和值之间的分隔符。
以#开头的行被视为注释。
安装jproperties库
该模块不是标准安装的一部分。
我们可以使用PIP安装jproperties模块。
# pip install jproperties
在Python中读取属性文件
我为示例创建了一个属性文件:app-config.properties。
# Database Credentials DB_HOST=localhost DB_SCHEMA=Test DB_User=root DB_PWD=root@neon
第一步是将Properties对象导入我们的Python程序并实例化。
from jproperties import Properties configs = Properties()
下一步是将属性文件加载到我们的Properties对象中。
with open('app-config.properties', 'rb') as config_file: configs.load(config_file)
推荐阅读:Python with Statement
现在,我们可以使用get()方法或者通过索引读取特定属性。
Properties对象与Python字典非常相似。
该值存储在PropertyTuple对象中,该对象是两个值的命名元组-data和meta。
jproperties也支持属性元数据,但是我们对此不感兴趣。
print(configs.get("DB_User")) # PropertyTuple(data='root', meta={}) print(f'Database User: {configs.get("DB_User").data}') # Database User: root print(f'Database Password: {configs["DB_PWD"].data}') # Database Password: root@neon
我们可以使用len()函数来获取属性的数量。
print(f'Properties Count: {len(configs)}') # Properties Count: 4
如果密钥不存在怎么办?
如果键不存在,则get()方法将返回None。
random_value = configs.get("Random_Key") print(random_value) # None
但是,如果我们使用索引,则会引发" KeyError"。
在这种情况下,最好使用try-except块来处理此异常。
try: random_value = configs["Random_Key"] print(random_value) except KeyError as ke: print(f'{ke}, lookup key was "Random_Key"') # Output: # 'Key not found', lookup key was "Random_Key"
打印所有属性
我们可以使用items()方法获取元组的集合,该元组包含键和相应的PropertyTuple值。
items_view = configs.items() print(type(items_view)) for item in items_view: print(item)
输出:
<class 'collections.abc.ItemsView'> ('DB_HOST', PropertyTuple(data='localhost', meta={})) ('DB_SCHEMA', PropertyTuple(data='Test', meta={})) ('DB_User', PropertyTuple(data='root', meta={})) ('DB_PWD', PropertyTuple(data='root@neon', meta={}))
由于我们希望将key = value打印为输出,因此可以使用以下代码。
for item in items_view: print(item[0], '=', item[1].data)
输出:
DB_HOST = localhost DB_SCHEMA = Test DB_User = root DB_PWD = root@neon
从属性文件中获取键列表
这是一个完整的程序,用于读取属性文件并创建所有键的列表。
from jproperties import Properties configs = Properties() with open('app-config.properties', 'rb') as config_file: configs.load(config_file) items_view = configs.items() list_keys = [] for item in items_view: list_keys.append(item[0]) print(list_keys) # ['DB_HOST', 'DB_SCHEMA', 'DB_User', 'DB_PWD']
Python将属性文件读入字典
属性文件与字典相同。
因此,将属性文件读入字典是一种常见的做法。
除了更改迭代代码以将元素添加到字典之外,这些步骤与上述步骤类似。
db_configs_dict = {} for item in items_view: db_configs_dict[item[0]] = item[1].data print(db_configs_dict) # {'DB_HOST': 'localhost', 'DB_SCHEMA': 'Test', 'DB_User': 'root', 'DB_PWD': 'root@neon'}