Python读写TOML文件 *.toml

TOML介绍

TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。
下文是一个较为详细的TOML介绍
https://segmentfault.com/a/1190000000477752

tom文件示例

TOML 是大小写敏感的

  1. 例子
  2. title = "TOML 例子"
  3. [owner]
  4. name = "Tom Preston-Werner"
  5. organization = "GitHub"
  6. bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
  7. dob = 1979-05-27T07:32:00Z # 日期时间是一等公民。为什么不呢?
  8. [database]
  9. server = "192.168.1.1"
  10. ports = [ 8001, 8001, 8002 ]
  11. connection_max = 5000
  12. enabled = true
  13. [servers]
  14. # 你可以依照你的意愿缩进。使用空格或Tab。TOML不会在意。
  15. [servers.alpha]
  16. ip = "10.0.0.1"
  17. dc = "eqdc10"
  18. [servers.beta]
  19. ip = "10.0.0.2"
  20. dc = "eqdc10"
  21. [clients]
  22. data = [ ["gamma", "delta"], [1, 2] ]
  23. # 在数组里换行没有关系。
  24. hosts = [
  25. "alpha",
  26. "omega"
  27. ]

Python读写TOML

toml包是一个为python语言解析toml编写的第三方包,其在pypi上的地址如下:
https://pypi.org/project/toml/

安装toml解析包

pip install toml
• 1

函数说明

toml包十分简单,解析常用的就是如下四个方法:

toml.load(f, _dict=dict)

从文件或者一组文件中解析TOML,返回一个字典对象或类的实例对象。当解析多个文件时,会按照传入顺序依次解析,后边的文件内包含键的值会覆盖之前文件相同键的值

参数

  • f 文件路径,多个文件路径的列表或者文件描述符
  • _dict 将解析结果填充到一个类中去

    返回

    一个字典对象或者_dict指定的类对象的实例

    异常

  • TypeError 如果参数f不是一个文件路径或者路径列表时会抛出该错误

  • TomlDecodeError 解析错误时抛出

    toml.loads(s, _dict=dict)

    从字符串中解析TOML,返回一个字典对象或类的实例对象

    参数

  • s 字符串对象

  • _dict 将解析结果填充到一个类中去

    返回

    一个字典对象或者_dict指定的类对象的实例

    异常

  • TypeError 如果参数f不是一个文件路径或者路径列表时会抛出该错误

  • TomlDecodeError 解析错误时抛出

    toml.dump(o, f)

    将字典对象写入toml文件

    参数

  • o 字典对象

  • f 文件描述符,即打开的文件对象

    返回

    格式化成toml语言的字符串

    异常

  • TypeError 各种错误都会返回该错误,包括传入的文件对象错误

    toml.dumps(o)

    将字典对象格式化成toml字符串

    参数

  • o 字典对象

    返回

    格式化成toml语言的字符串

    代码示例

  • a.toml

    title = "TOML in file a"
    [owner]
    name = "Tom Preston-Werner"
    organization = "GitHub"
    bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
    dob = 1979-05-27T07:32:00Z # 日期时间是一等公民。为什么不呢?
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    
  • b.toml

    title = "TOML in file b"
    [owner]
    name = "Tom Preston-Werner"
    organization = "GitHub"
    bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
    dob = 1979-05-27T07:32:00Z # 日期时间是一等公民。为什么不呢?
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    

    读取单个配置文件

    import toml
    file_a = "res/a.toml"
    if __name__ == "__main__":
      a = toml.load(file_a)
      print("变量a的类型: %s" % type(a))
      print("变量a的内容: %s" % a)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    

    Python读写TOML文件.toml - 图1

    读取多个文件

    import toml
    file_a = "res/a.toml"
    file_b = "res/b.toml"
    if __name__ == "__main__":
      a = toml.load([file_a, file_b])
      print("后读文件b的结果:%s" % a)
      a = toml.load([file_b, file_a])
      print("后读文件a的结果:%s" % a)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    

    Python读写TOML文件.toml - 图2

    将字典写入文件

    import toml
    dst_file = "res/c.toml"
    if __name__ == "__main__":
      a = {'a': 1, 'b': {'c': 1, 'd': {'e': 1}}}
      with open(dst_file, 'w') as f:
          r = toml.dump(a, f)
          print(r)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    

    Python读写TOML文件.toml - 图3