web-dev-qa-db-ja.com

ValueError:未変換のデータが残っています:02:05

私は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

何か提案はありますか ?

20
4m1nh4j1

st = datetime.strptime(st, '%A %d %B')行のstの値は01 01 2013 02:05のような行で、strptimeはこれを解析できません。確かに、日付に加えて1時間を取得します... strptimeに%H:%Mを追加する必要があります。

27
Maxime Lorant

最良の答えは、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())
6

入力文字列のallを解析する必要があります。部分だけを無視することはできません。

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']文字列のpartだけを渡すことです(ただ時間を分割します)が、最初に1ステップですべてを解析できる場合ではなく、実際にはここには意味がありません。

6
Martijn Pieters

まあそれは非常に簡単でした。私はjsonファイルに日付の形式が欠けていたので、書く必要があります:

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

jsonファイルでは日付が次のようだったからです。

"start": "Friday 06 December 02:05",
1
4m1nh4j1