【问题标题】:ValueError: Unconverted data remains .000ValueError:未转换的数据仍然是 0.000
【发布时间】:2020-07-22 19:10:31
【问题描述】:

我是 Python 的超级新手,当我的源 csv 文件更改其格式时,我被抛出一个循环。日期字段现在有:2020-07-22T00:00:00.000,而我想要的是:2020-07-22

我需要读取源 csv 并将其附加到数据库表中。我查看了其他一些问题,发现了这个示例代码,我认为它可以满足我的需求(创建一个带有新格式日期的 csv 副本,我可以将其与我的其余代码一起使用)。

import csv
from datetime import datetime

with open(csvCasesVH, 'r') as source:
    with open(csvCasesVH2, 'w') as result:
        writer = csv.writer(result, lineterminator='\n')
        reader = csv.reader(source)
        source.readline()
        for row in reader:
            ts = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S').strftime("%Y-%m-%d")
            print(ts)
            row[0]=ts
            if ts != "":
                writer.writerow(row)
source.close()
result.close()

我正在尝试找出日期时间格式 - 几乎到了那里,但现在这个 .000 挂在那里我不知道该怎么办:

ValueError:未转换的数据仍然存在:.000

如果有任何建议,我将不胜感激。谢谢。

【问题讨论】:

    标签: python csv datetime strptime


    【解决方案1】:

    strptime 函数试图从字符串中获取日期时间对象,为此它需要一个日期时间字符串并且它需要一个与字符串匹配的格式。例如,假设我有字符串'25/07/2020 21:13',要提取日期,我需要给它格式'%d/%m/%Y %H:%M',如果我给它的话格式 '%d/%m/%Y %H:' 它会给出错误ValueError: unconverted data remains: 13,因为它不知道 13 代表什么(分钟?秒?上午/下午?)。要解决这个问题,您可以通过打印字符串并修改格式来查看字符串的外观。

    https://strftime.org/ 是一个在处理日期时间格式时有用的网站。

    在您的情况下,剩余的 .000 可能意味着微秒,因此您需要将其添加到格式中:'%Y-%m-%dT%H:%M:%S.%f'(%f 代表微秒)

    【讨论】:

      【解决方案2】:

      尝试更新该行:

      ts = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S').strftime("%Y-%m-%d")

      收件人:

      ts = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S.%f').strftime("%Y-%m-%d")

      注意.%f 是微秒

      【讨论】:

        【解决方案3】:

        尝试使用'%Y-%m-%dT%H:%M:%S.%f000'作为格式化字符串:

        应用于您的代码:

        ts = datetime.strptime(row[0], '%Y-%m-%dT%H:%M:%S.%f000').strftime("%Y-%m-%d")
        

        【讨论】:

          猜你喜欢
          • 2020-04-25
          • 2020-03-29
          • 1970-01-01
          • 2013-12-18
          • 2020-08-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多