【发布时间】:2020-08-26 02:54:09
【问题描述】:
我有一个包含数百列的大型 CSV,我想将这些列提取到 SQL Server 中。 我正在使用 Pandas 将其作为数据帧读取,并通过 pyodbc 调用存储过程来写入数据。我以前用较小的 CSV 做过很多次。在这种情况下,我有几列代表日期时间值。问题是,在单个列中,我可以拥有使用不同日期格式的行:
'2020-07-08T09:00:01+00:00'
'2020-07-08T05:00:07Z'
'2020-07-08T06:40:23.000Z'
我可以用这个解析所有这些
from dateutil import parser
z1 = parser.isoparse(z)
其中 z 是这些字符串中的任何一个。这是我的困境。如果我只是将这些写为字符串,则对 sql 的调用喜欢格式“2020-07-08T06:40:23.000Z”,而不是其他格式。所以我想用那种格式写。
所以我试试
date_format = "%Y-%m-%dT%H:%M:%S.%fZ"
parser.isoparse(z).strftime(frm)
但是,该格式写入字符串“2012-11-29T16:33:00.000000Z”,而不是“2012-11-29T16:33:00.000Z” 最后一个句点和 Z 之间必须正好有 3 个零。我尝试使用“%3f”,但 strftime() 不喜欢这样。我可以用我自己的函数来“修复它”来提取额外的“0”,但这似乎很俗气。似乎应该有某种方法可以像我想要的那样直接编写它(sql似乎期望的方式)。咒语是什么?
【问题讨论】:
-
This question 是相关的。最好的答案是简单地做你提到的事情并分割字符串。
-
你也可以考虑嵌套 try/except 块,每个块都有不同的 strptime 格式字符串。诚然不优雅,但任何不匹配的格式都会引发 ValueError。
标签: python datetime pyodbc strftime