मैं datetime.strptime का उपयोग करके '2020-07-30T20: 40: 33.1000000Z' को कैसे पार्स कर सकता हूं

Aug 17 2020

मैं पायथन में "2020-07-30T20: 40: 33.1000000Z" को पार्स करने और बदलने की कोशिश कर रहा हूं:

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")

त्रुटि:

    raise ValueError("unconverted data remains: %s" %
ValueError: unconverted data remains: .1005865Z

मैंने कोशिश की :

%Y-%m-%dT%H:%M:%S.%fZ

क्या कोई कृपया सही प्रारूप का सुझाव दे सकता है जो मुझे याद आ रहा है।

जवाब

2 MrFuppes Aug 17 2020 at 09:13

यदि आप वास्तव में आंशिक सेकंड के 7 दशमलव स्थानों है और माइक्रोसेकंड की 1 / 10th के बारे में परवाह नहीं है , तो आप एक इस्तेमाल कर सकते हैं re.subऔर 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)

... या dateutilपार्सर का उपयोग करें :

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())

... या यहां तक ​​कि pandasto_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')

अक्सर अप्रासंगिक (उपयोग के मामले पर निर्भर करता है) लेकिन ध्यान दें कि सुविधा से आपको कुछ और समय लग सकता है:

%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)