import datetime
from tomlkit import document, table, array, inline_table, date, nl, comment
# tomlkit.date函数解析日期字符串, 用于处理TOML文件中的日期数据
addr = r"d:\data\config.toml"
doc = document()
doc.add(comment("这是一个 TOML 文档"))
doc.add(nl())
doc["title"] = "TOML 示例"
owner = table()
owner["name"] = "Tom Preston-Werner"
owner["dob"] = datetime.datetime(1979, 5, 27, 7, 32, tzinfo=datetime.timezone(datetime.timedelta(hours=-8)))
doc.add("owner", owner)
database = table()
database["enabled"] = True
database["ports"] = array([8000, 8001, 8002])
database["data"] = array([array(["delta", "phi"]), array([3.14])])
temp_targets = inline_table()
temp_targets["cpu"] = 79.5
temp_targets["case"] = 72.0
database["temp_targets"] = temp_targets
doc.add("database", database)
servers = table()
alpha = table()
alpha["ip"] = "10.0.0.1"
alpha["role"] = "前端"
servers.add("alpha", alpha)
beta = table()
beta["ip"] = "10.0.0.2"
beta["role"] = "后端"
servers.add("beta", beta)
doc.add("servers", servers)
with open(addr, "w") as f:
f.write(doc.as_string())
import tomlkit
with open(addr, 'r') as f:
data = tomlkit.parse(f.read())
print(data, type(data))
owner_dob = data['owner']['dob']
datetime_dob = datetime.datetime(1979, 5, 27, 7, 32, tzinfo=datetime.timezone(datetime.timedelta(hours=-8)))
print(owner_dob, type(owner_dob), datetime_dob, type(datetime_dob), owner_dob==datetime_dob)
在Python中,tomlkit.items.DateTime
对象是用来表示TOML文件中的日期时间值的。如果你想将tomlkit.items.DateTime
对象转换为Python的datetime
对象,你可以直接使用datetime
模块的datetime
类的构造函数来实现。
以下是一个示例:
from datetime import datetime
from tomlkit import parse
# 假设你有一个TOML文档
toml_doc = """
[tool]
last_run = 2022-12-12T12:12:12Z
"""
# 解析TOML文档
parsed_toml = parse(toml_doc)
# 获取tomlkit.items.DateTime对象
toml_datetime = parsed_toml["tool"]["last_run"]
print(toml_datetime, type(toml_datetime))
# 转换为Python的datetime对象
py_datetime = datetime(
year=toml_datetime.year,
month=toml_datetime.month,
day=toml_datetime.day,
hour=toml_datetime.hour,
minute=toml_datetime.minute,
second=toml_datetime.second,
microsecond=toml_datetime.microsecond,
tzinfo=toml_datetime.tzinfo,
)
print(py_datetime, type(py_datetime))
print(toml_datetime==py_datetime)
在这个例子中,我们首先解析了一个TOML文档,然后从解析结果中获取了一个tomlkit.items.DateTime
对象。然后,我们使用这个tomlkit.items.DateTime
对象的属性(如year
、month
、day
等)来创建一个Python的datetime
对象。
需要注意的是,tomlkit.items.DateTime
对象的tzinfo
属性是一个datetime.timezone
对象,所以我们可以直接将其作为datetime
对象的tzinfo
参数。