首页 > 解决方案 > Python3 - 在列表中格式化日期

问题描述

我目前正在尝试将日期 ("2017-01-25T09:00") 转换为 %Y-%m-%d %H:%M

我尝试使用 strptime() 但我得到 TypeError: strptime() argument 1 must be str, not list

我需要在列表中的每一项上都试一下吗?在列表中,日期显示更感谢一次。

代码步骤:

  1. 从 JSON 中的 Rest 请求中获取响应
  2. 提取标题值
  3. 逐行提取正文
  4. 将日期格式不正确的值更新为所需格式
  5. 将提取的每一行写入电子表格

这是我目前正在尝试的:

    for line in body:
    #newMessageDate = line.get('messagedate')
    if line:
        date_formats = ["%Y-%m-%d%T%H:%M"]
        for date_fmt in date_formats:
            try:
                line = datetime.datetime.strptime(line, date_fmt).strftime('%Y-%m-%d %H:%M')
            except ValueError:
                continue
            else:
                break

输出的 csv 文件的精简版本如下:

driver,id,startdate,startlocation,finsihlocation,finsihtime
Driver 1,3,2016-09-21T12:02,Dublin,2016-09-21T15:02
Driver 2,4,2016-09-21T12:02,Dublin,2016-09-21T15:02

提前致谢!

标签: pythonpython-3.xstrptime

解决方案


您似乎正在使用 .csv 文件从 CSV 文件中读取数据DictReader。这意味着这line是一个在当前行中保存键及其值的字典,如当前注释行中所示#newMessageDate = line.get('messagedate')

在这种情况下,您应该使用line.get('messagedate')而不是line它本身。

newMessageDate = line.get('messagedate')
newMessageDate = datetime.datetime.strptime(newMessageDate, date_fmt).strftime('%Y-%m-%d %H:%M')

(我正在跳过循环,try/except因为它们没有改变。)


不幸的是,您没有说明具体的line外观。从最新的评论来看,您似乎没有阅读 CSV 而是 JSON,而且那line是 alist而不是dict. 在这种情况下,您必须使用相应的索引访问日期元素,例如newMessageDate = line[3](假设日期位于列表的第四位)。其余的答案仍然成立。


推荐阅读