2009-02-10 19 views
14

मेरे पास isoformat में बहुत से डेटाटाइम स्ट्रिंग्स के साथ एक टेक्स्ट फ़ाइल है। तार इस के समान हैं:माइक्रोसॉन्ड के साथ डेटाटाइम स्ट्रिंग्स को पार्सिंग

'2009-02-10 16: 06: ५२.५,९८,८००'

ये स्ट्रिंग str(datetime_object) का उपयोग कर उत्पन्न किया गया।

'2009-02-10 16:06:52'

: समस्या यह है कि, किसी कारण से, str(datetime_object) जब datetime वस्तु माइक्रोसेकंड शून्य पर सेट है एक अलग स्वरूप उत्पन्न करता है और कुछ तार इस तरह दिखना है मैं इन तारों को कैसे पार्स कर सकता हूं और उन्हें datetime object में परिवर्तित कर सकता हूं?

माइक्रोसॉन्ड सहित ऑब्जेक्ट में सभी डेटा प्राप्त करना बहुत महत्वपूर्ण है।

मुझे पायथन 2.5 का उपयोग करना है, मैंने पाया है कि माइक्रोसॉंड के लिए %f प्रारूप प्रारूप निर्देश 2.5 में मौजूद नहीं है।

उत्तर

21

वैकल्पिक रूप से:

from datetime import datetime 

def str2datetime(s): 
    parts = s.split('.') 
    dt = datetime.strptime(parts[0], "%Y-%m-%d %H:%M:%S") 
    return dt.replace(microsecond=int(parts[1])) 

strptime ही (ताकि कोई जरूरत का उपयोग करते हुए दिनांक/समय स्ट्रिंग पार्स करने एक रेगेक्स के लिए कोने के मामलों को सोचने के लिए)।

+0

इस उत्तर के लिए धन्यवाद

आप नीचे दिए गए कोड काम करने के लिए dateutil easy_install करने की आवश्यकता होगी! मैं अंतिम पंक्ति को बदलने के लिए सुझाव दूंगा: वापसी dt.replace (microsecond = int (1000 * float ('0.' + parts [1])) यह सभी मामलों को सही तरीके से संभालता है, जैसे उदा। '2017-03-16 21: 20: 57.31' जो 31us के बजाय 310us देना चाहिए। – denizb

5

किसी ने इस मुद्दे के साथ पहले ही एक बग दायर कर दिया है: Issue 1982। चूंकि आपको इसे पाइथन 2.5 के साथ काम करने की आवश्यकता है, इसलिए आपको मूल्य मैनुअल को पार्स करना होगा और फिर डेटाटाइम ऑब्जेक्ट में हेरफेर करना होगा।

2

यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन आप रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं:

m = re.match(r'(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})(?:\.(\d{6}))?', datestr) 
dt = datetime.datetime(*[int(x) for x in m.groups() if x]) 
10

डेटपुट मॉड्यूल का उपयोग करें। यह पाइथन में निर्मित की तुलना में दिनांक और समय प्रारूपों की एक विस्तृत श्रृंखला का समर्थन करता है।

from dateutil.parser import parser 

p = parser() 
datetime_with_microseconds = p.parse('2009-02-10 16:06:52.598800') 
print datetime_with_microseconds.microsecond 

परिणामों में:

598799 
+0

+1 डेट्यूटिल सभी तरह से – Yarin

संबंधित मुद्दे