【问题标题】:ValueError: unconverted data remains: 02:05ValueError:未转换的数据仍然存在:02:05
【发布时间】:2013-12-18 03:21:27
【问题描述】:

我在 json 文件中有一些日期,我正在寻找与今天日期相对应的日期:

import  os
import time
from datetime import datetime
from pytz import timezone

input_file  = file(FILE, "r")
j = json.loads(input_file.read().decode("utf-8-sig"))

os.environ['TZ'] = 'CET'

for item in j:
    lt = time.strftime('%A %d %B')
    st = item['start']
    st = datetime.strptime(st, '%A %d %B')

    if st == lt :
        item['start'] = datetime.strptime(st,'%H:%M') 

我遇到了这样的错误:

File "/home/--/--/--/app/route.py", line 35, in file.py

st = datetime.strptime(st, '%A %d %B')

File "/usr/lib/python2.7/_strptime.py", line 328, in _strptime

data_string[found.end():])

ValueError: unconverted data remains: 02:05

你有什么建议吗?

【问题讨论】:

    标签: python date datetime python-2.7


    【解决方案1】:
      timeobj = datetime.datetime.strptime(my_time, '%Y-%m-%d %I:%M:%S')
      File "/usr/lib/python2.7/_strptime.py", line 335, in _strptime
        data_string[found.end():])
    ValueError: unconverted data remains:
    

    在我的例子中,问题是输入日期字符串中有一个额外的空格。所以我使用了strip(),它开始工作了。

    【讨论】:

      【解决方案2】:

      最好的答案是使用from dateutil import parser

      用法:

      from dateutil import parser
      datetime_obj = parser.parse('2018-02-06T13:12:18.1278015Z')
      print datetime_obj
      # output: datetime.datetime(2018, 2, 6, 13, 12, 18, 127801, tzinfo=tzutc())
      

      【讨论】:

      • 有时它确实很有用,但请记住,此解决方案的运行速度通常会慢几倍。
      【解决方案3】:

      你必须解析输入字符串的所有,你不能只忽略部分。

      from datetime import date, datetime
      
      for item in j:
          st = datetime.strptime(item['start'], '%A %d %B %H:%M')
      
          if st.date() == date.today():
              item['start'] = st.time()
      

      在这里,我们通过使用更多的datetime 对象而不是尝试使用字符串来比较日期和今天的日期。

      另一种方法是只传入item['start'] 字符串的部分(只分出时间),但这里真的没有意义,而不是当您可以一步解析所有内容时首先。

      【讨论】:

      • 我认为如果 %z 是该时间戳的一部分,那么替代方案将是必要的,因为未处理时区。
      【解决方案4】:

      st = datetime.strptime(st, '%A %d %B') 行中的 st 的值类似于 01 01 2013 02:05strptime 无法解析这个。确实,除了日期之外,您还有一个小时……您需要在 strptime 添加%H:%M

      【讨论】:

      • 我意外地交换了月份和日期变量时遇到了同样的错误。它显示unconverted data remains: 3。我以为 3 是一个单位,但它只是解析器完成后剩余的字符串部分。
      • 我在解析“2020 年 12 月 9 日上午 11:33:28”时遇到同样的错误,格式为“%d %b %Y %I:%M:%S %p”。让我感到困惑。
      【解决方案5】:

      嗯,这很简单。我错过了 json 文件中日期的格式,所以我应该写:

      st = datetime.strptime(st, '%A %d %B %H %M')
      

      因为在 json 文件中日期是这样的:

      "start": "Friday 06 December 02:05",
      

      【讨论】:

      • 您在那里缺少:。您还错过了通过尝试将其与字符串进行比较而解析出的 datetime 对象的丰富性。
      • 您能否解释一下在这种情况下如何使用丰富的日期时间?无论如何,谢谢。
      • 查看我的答案,我使用st.date() == date.today() 来测试解析的值是否是今天。
      猜你喜欢
      • 2020-03-29
      • 2020-04-25
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多