【问题标题】:How to add padding zeros to a datetime object in Python?如何在 Python 中向日期时间对象添加填充零?
【发布时间】:2021-05-21 05:20:35
【问题描述】:

我有一个如下所示的文件:

London  XXX Europe  2020    9   7   0   0   0   2   2020    9   7   0   11  35  2   57
Tanger  XXX Africa  2020    9   7   0   29  54  2   2020    9   7   23  57  16  2   29
Doha    XXX Asia    2020    9   7   0   57  23  2   2020    9   7   23  58  48  2   11

我正在尝试将索引3,4,5,6,7,8Year, Month, Day, Hour, Minute, Second. 合并到一个日期时间对象中我尝试对end_time 做同样的事情。但是,我文件中的零似乎会产生一些奇怪的输出。

这是我的代码:

path = r'c:\data\EK\Desktop\Python Microsoft Visual Studio\Extra\test_datetime.txt'

with open(path, 'r') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    for row in reader:
        start_time = (row[3] + row[4] + row[5] + row[6] + row[7] + row[8])  
        end_time = (row[10] + row[11] + row[12] + row[13] + row[14] + row[15])

        start_time = datetime.datetime.strptime(start_time, "%Y%m%d%H%M%S")
        end_time = datetime.datetime.strptime(end_time, "%Y%m%d%H%M%S")

        print(start_time)
        print(end_time)

这是我当前的输出:

2020-09-07 00:00:00
2020-09-07 01:13:05
2020-09-07 02:09:54
2020-09-07 23:57:16
2020-09-07 05:07:23
2020-09-07 23:58:48

这是我的预期输出:

2020-09-07 00:00:00
2020-09-07 00:11:35
2020-09-07 00:29:54
2020-09-07 23:57:16
2020-09-07 00:57:23
2020-09-07 23:58:48

【问题讨论】:

  • 是否可以选择使用 pandas?
  • 为什么要使用strptime() 而不是直接从文件中的值创建datetime 对象?
  • @EzerK 不,最好不要。我想让它与我当前的代码一起工作。
  • @Barmar 我还没有真正考虑过...
  • +1 用于使用pandas - 如果你想深入挖掘,也可以跳过使用csv 并编写你自己的解析器。但为什么不享受一些便利呢?例如看看convert columns into one datetime column in pandas

标签: python csv datetime indexing


【解决方案1】:

问题在于,当您连接 row[3] + row[4] + row[5] + row[6] + row[7] + row[8] 之类的字段时,所有一位数字字段都没有前导零,因此无法使用 strptime() 正确解析它们。

您可以使用字符串格式化函数来添加前导零,但首先没有理由使用strptime()。只需调用 datetime.datetime() 即可直接从值创建对象。

start_time = datetime.datetime(*map(int, row[3:9]))
end_time = datetime.datetime(*map(int, row[10:16]))

【讨论】:

  • 谢谢。这看起来不错。你能解释一下*map函数刚刚做了什么吗?
  • map() 对列表的所有元素调用一个函数并返回所有结果。因此,这会将列表中的所有字符串转换为整数。并且* 将列表传播到函数的单独参数中。
  • 那么我可以假设这将始终 100% 工作吗?
  • 我不会赌上我的性命,但我不明白为什么它不起作用。
  • 只要 CSV 中的列与 datetime.datetime() 的参数顺序相同,它就应该可以工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 2013-12-13
  • 2019-11-08
  • 2021-05-18
  • 2011-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多