【问题标题】:Times from YML file printing wrong [duplicate]YML文件打印错误的时间[重复]
【发布时间】:2021-12-30 17:09:16
【问题描述】:

我有一个.yml 文件,这是我的配置。在这个文件中,我定义了两次,如下所示:

my-times:
    earliest_time: 17:00  #PM
    latest_time: 19:00  #PM

我的代码如下所示:

conf: object = yaml.safe_load(open('myconfig.yml'))

earliest_time = str(conf['my-times']['earliest_time'])
latest_time = str(conf['my-times']['latest_time'])

print(earliest_time)
print(latest_time)

但是当我在这个时间窗口中并且我想在if-statement 中打印或使用它们时,我得到了以下输出:

0:00
1080

上面代码中如何正常打印第二次,和.yml文件中一样?

【问题讨论】:

  • 你确定代码和.yml文件方向一致吗?路径对吗?
  • 如果你想以字符串形式引用时间。例如:earliest_time: "17:00"
  • 感谢这对我有用

标签: python time printing yaml python-3.10


【解决方案1】:

yaml 加载程序将 17:00 解释为时间,并将值作为表示时间的整数返回(以分钟为单位)。因此 17:00 将是 1020,而 19:00 将是 1140

编辑:代码示例显示如何以原始形式表示获取的值:

import yaml

with open('myconfig.yml') as yml:
    conf = yaml.safe_load(yml)
    for k in ['earliest_time', 'latest_time']:
        e = conf['my-times'][k]
        h, m = divmod(e, 60)
        print(f'{h:02d}:{m:02d}')

输出:

17:00
19:00

【讨论】:

  • 有没有简单的方法来计算这些值,或者有表格吗?
  • 将分钟转换为小时和分钟是微不足道的。试试 divmod
【解决方案2】:

您可以更改您的 yaml 文件:

my-times:
    earliest_time: "17:00"  #PM
    latest_time: "19:00"  #PM

这告诉 YAML 它是一个文字字符串,并禁止尝试将其视为数值。 查看这篇文章了解更多信息: https://stackoverflow.com/a/28835540/8961170

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 2016-06-19
    • 1970-01-01
    • 2017-06-30
    • 1970-01-01
    • 2023-04-10
    • 2015-07-23
    相关资源
    最近更新 更多