Datetime.strptime kullanarak '2020-07-30T20: 40: 33.1000000Z'yi nasıl ayrıştırabilirim?
Aug 17 2020
Python'da "2020-07-30T20: 40: 33.1000000Z" öğesini ayrıştırmaya ve dönüştürmeye çalışıyorum:
from datetime import datetime
Data = [{'id': 'XXXXXXXXXXXXX', 'number': 3, 'externalId': '0000', 'dateCreated': '2020-07-30T20:40:33.1005865Z', 'dateUpdated': '2020-07-30T20:40:33.36Z'}], 'tags': []}]
for i in Data:
creationtime= datetime.strptime(i["dateCreated"],"%Y-%m-%dT%H:%M:%S")
Hata:
raise ValueError("unconverted data remains: %s" %
ValueError: unconverted data remains: .1005865Z
Denedim :
%Y-%m-%dT%H:%M:%S.%fZ
Herhangi biri eksik olduğum doğru biçimi önerebilir mi?
Yanıtlar
2 MrFuppes Aug 17 2020 at 09:13
eğer gerçekten fraksiyonel saniye 7 basamak olacak ve mikrosaniye 1 / 10'u umurumda değil , bir kullanabilirsiniz re.subve datetime.fromisoformat:
import re
from datetime import datetime
s = "2020-07-30T20:40:33.1000000Z"
dt = datetime.fromisoformat(re.sub('[0-9]Z', '+00:00', s))
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
datetime.datetime(2020, 7, 30, 20, 40, 33, 100000, tzinfo=datetime.timezone.utc)
... veya dateutil'ın ayrıştırıcısını kullanın :
from dateutil import parser
dt = parser.parse(s)
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
datetime.datetime(2020, 7, 30, 20, 40, 33, 100000, tzinfo=tzutc())
... ya da hatta pandasbu kütüphaneyle yine de çalışıyorsanız, to_datetime:
import pandas as pd
dt = pd.to_datetime(s)
print(dt)
print(repr(dt))
2020-07-30 20:40:33.100000+00:00
Timestamp('2020-07-30 20:40:33.100000+0000', tz='UTC')
genellikle alakasızdır (kullanım durumuna bağlı olarak) ancak kolaylığın size biraz daha fazla zamana mal olacağını unutmayın:
%timeit datetime.fromisoformat(re.sub('[0-9]Z', '+00:00', s))
1.92 µs ± 151 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit parser.parse(s)
79.8 µs ± 3.46 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
%timeit pd.to_datetime(s)
62.4 µs ± 1.17 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'