2014-09-19 32 views
1

我需要從Pandas庫中解析字符串「28-05-2014_02:44:32.630」。如何在Python中定義一個非ISO日期解析器?

下面的代碼工作就像標準ISO日期魅力 「28-05-2014T02:44:32.630」:

In [1]: import dateutil.parser 

In [3]: dateutil.parser.parse("28-05-2014T02:44:32.630", dayfirst=True) 
Out[3]: datetime.datetime(2014, 5, 28, 2, 44, 32, 630000) 

但不符合我的輸入字符串:

In [4]: dateutil.parser.parse("28-05-2014_02:44:32.630", dayfirst=True) 
... 
ValueError: unknown string format 

哪有我定義了我自己的解析器?

Thk提前!


(編輯)

這是我工作的代碼(感謝roippi):

import pandas 
from datetime import datetime 

def my_date_parser(d): 
    return datetime.strptime(d, '%d-%m-%Y_%H:%M:%S.%f') 

i = pandas.read_csv('test.tsv', sep='\t', index_col=0, parse_dates=True, date_parser=my_date_parser) 
... 

回答

3

使用datetime.strptime直接:

parseme = "28-05-2014_02:44:32.630" 

from datetime import datetime 

datetime.strptime(parseme, '%d-%m-%Y_%H:%M:%S.%f') 
Out[34]: datetime.datetime(2014, 5, 28, 2, 44, 32, 630000) 
0

你可以使用正則表達式箱解析器!

import re 
def my_parser(string): 
return re.split(r':|-|_',string) 

演示:

>>> s="28-05-2014_02:44:32.630" 
>>> import re 
>>> s="28-05-2014_02:44:32.630" 
>>> re.split(r':|-|_',s) 
['28', '05', '2014', '02', '44', '32.630']