2016-04-01 9 views
2

sagen, wir haben einen String:Gibt es ein As.Date() - Äquivalent (R) in Python?

string = "2014-12-04 04:07:59 <font color='green'> info:</font> One, two, three, four, five." 

In Python, würde ich alles, aber 2014-12-04 entfernen müssen, dann

time.mktime(datetime.datetime.strptime(string, "%Y-%m-%d").timetuple()) 

Auf der anderen Seite verwenden, in R, alles, was ich zu tun haben, ist as.Date(string) und ich bekomme das passende Datum, in Datumsform. Hat Python so etwas?

+4

Sie meinen, abgesehen von 'datetime.strptime (string.partition (‘ ‚) [0], '% Y-% m-% d'))? Nicht wirklich - Sie müssen herausfinden, was der Kandidat für ein Date ist (was ist, wenn es mehr als eines gab - um nicht zu erwähnen in verschiedenen Formaten), dann analysieren Sie es. –

+0

Die 3rd-Party-Bibliothek 'dateutil' kann beim Parsen eines Datums in einer Vielzahl von Formaten helfen - aber die Zeichenfolge, die Sie übergeben, muss immer noch wie ein Datum aussehen. Ich denke nicht, dass es nach etwas suchen wird, das wie ein Datum in der Zeichenfolge aussieht, und versuche dann, das zu analysieren. – mgilson

+0

@mgilson nope - es erwartet immer noch, dass die Zeichenfolge nur ein Datum enthält ... –

Antwort

2

Wenn Sie den Speicherort in der Zeichenfolge und der Datumsformatierung kennen, können Sie schneiden verwenden zusammen mit strptime:

import datetime as dt 

>>> dt.datetime.strptime(string[:10], '%Y-%m-%d').date() 
datetime.date(2014, 12, 4) 

Wenn Sie ein Paket wie Pandas verwenden möchten:

>>> pd.to_datetime(string[:10]) 
Timestamp('2014-12-04 00:00:00') 

Sie können auch das dateutil Paket verwenden:

from dateutil.parser import parse 

parse(string[:10]).date() 
datetime.date(2014, 12, 4) 
1

Zu fi nd ein Datum/Uhrzeit in einem beliebigen Text, könnten Sie parsedatetime module versuchen:

>>> import parsedatetime as pdt # $ pip install parsedatetime 
>>> text_with_date = "2014-12-04 04:07:59 <font color='green'> info:</font> One, two, three, four, five." 
>>> pdt.Calendar().nlp(text_with_date) 
((datetime.datetime(2014, 12, 4, 4, 7, 59), 3, 0, 19, '2014-12-04 04:07:59'),) 

ein datetime Objekt gegeben, rufen .date() Methode, um nur das Datum Teil zu erhalten.

2

Das fuzzy Argument dateutil wird für genau diesen Zweck verwendet:

from dateutil.parser import parse 

string = "2014-12-04 04:07:59 <font color='green'> info:</font> One, two, three, four, five." 
dt = parse(string, fuzzy=True) 

Das Ergebnis ist:

datetime.datetime(2014, 12, 4, 4, 7, 59) 

Wenn Sie nur das Datum wollen, nur dt.date() verwenden, um ein Date-Objekt zurück.

Beachten Sie, dass, wenn es andere Dinge in der Zeichenfolge gibt, die plausibel Teil eines Datums sein könnten (z. B. das Wort March oder etwas), das Probleme für den Parser verursacht.

Wenn Sie die Dinge, die sie übersprungen, um sehen möchten, verwenden Sie fuzzy_with_tokens:

from dateutil.parser import parse 

string = "2014-12-04 04:07:59 <font color='green'> info:</font> One, two, three, four, five." 
dt = parse(string, fuzzy=True) 

dt, tokens = parse(string, fuzzy_with_tokens=True) 

tokens löst auf:

(' ', " <font color='green'> info:</font> One, two, three, four, five.") 
Verwandte Themen