Python解析Java风格properties配置文件的方法

向北走
向北走
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍如何在Python中解析Java风格的properties配置文件。针对键值对包含多级嵌套(如A.B.C=value)及注释符号的场景,通过自定义Properties类实现递归解析。示例代码展示了如何读取文件、处理注释并生成嵌套字典结构,适用于将Java项目逻辑迁移至Python时的配置处理需求。

本文通过一个具体实例,展示在Python中读取properties配置文件的实现方法。内容旨在为相关开发工作提供参考与借鉴。

在实际项目中,有时需要将Java项目的业务逻辑迁移至Python环境。由于Java项目广泛使用.properties格式的配置文件,其内容通常遵循“键.键.键...=值”的层级结构,例如“A.B.C=value1”或“D.F=value2”。此外,文件中使用“#”符号表示注释。由于Python标准库中缺乏直接处理properties格式的工具,仅支持标准的ini格式,因此需要编写自定义Python代码来解析此类文件。

具体实现可参考前文内容:https://www.jb51.net/article/137390.htm

本方案在前文基础上,重点增加了对“key.key.key=value”这种多级嵌套键值形式的支持。

核心逻辑封装在Util.py文件中,具体实现如下。

class Properties(object):
  def __init__(self, fileName):
    self.fileName = fileName
    self.properties = {}
  def __getDict(self,strName,dictName,value):
    if(strName.find('.')>0):
      k = strName.split('.')[0]
      dictName.setdefault(k,{})
      return self.__getDict(strName[len(k)+1:],dictName[k],value)
    else:
      dictName[strName] = value
      return
  def getProperties(self):
    try:
      pro_file = open(self.fileName, 'Ur')
      for line in pro_file.readlines():
        line = line.strip().replace('\n', '')
        if line.find("#")!=-1:
          line=line[0:line.find('#')]
        if line.find('=') > 0:
          strs = line.split('=')
          strs[1]= line[len(strs[0])+1:]
          self.__getDict(strs[0].strip(),self.properties,strs[1].strip())
    except Exception, e:
      raise e
    else:
      pro_file.close()
    return self.properties

配置文件filename.properties的内容示例如下。

a.b.d=v1
a.c=v2
d.e=v3
f=v4

用于测试该解析功能的text.py脚本如下。

from Util import Properties
dictProperties=Properties("filename.properties").getProperties()
print dictProperties

运行测试文件后,控制台输出结果如下。

{'a': {'c': 'v2', 'b': {'d': 'v1'}}, 'd': {'e': 'v3'}, 'f': 'v4'}

如需了解更多Python编程技巧,建议查阅本站相关专题,包括《Python函数使用技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》以及《Python文件与目录操作技巧汇总》。

希望上述内容能对您的Python程序设计工作提供实际帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表