python - Python3 - 在列表中格式化日期
问题描述
我目前正在尝试将日期 ("2017-01-25T09:00") 转换为 %Y-%m-%d %H:%M
我尝试使用 strptime() 但我得到 TypeError: strptime() argument 1 must be str, not list
我需要在列表中的每一项上都试一下吗?在列表中,日期显示更感谢一次。
代码步骤:
- 从 JSON 中的 Rest 请求中获取响应
- 提取标题值
- 逐行提取正文
- 将日期格式不正确的值更新为所需格式
- 将提取的每一行写入电子表格
这是我目前正在尝试的:
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
提前致谢!
解决方案
您似乎正在使用 .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]
(假设日期位于列表的第四位)。其余的答案仍然成立。
推荐阅读
- scenekit - Scenekit scnbillboard 和lookatconstraints 冲突
- c - 当 fscanf 返回一个不同于 1 的值时,循环中的条件语句检查变量集会导致无限循环
- ssl - 如果项目是 .Net Core Restful API,浏览器无法下载 .txt 文件
- chisel - 在 Chisel 中获得格雷码计数器是否有公认的方法?
- list - 列表中的 Prolog-Sum 正数
- c++ - 类在 C++ 中不包含名为 ... 的成员
- c++ - 未检测到 -std=c++03 编译
- java - Java 中的 volatile 变量是否应该在第二个线程上不可见?
- events - 如何在 Azure 事件中心中仅读取一次事件
- couchdb - 链码找不到索引