2017-02-14 53 views
1

我有一個腳本,用於讀取電子郵件並從正文中提取日期時間。這是工作的罰款,直至其收到的日期時間格式的電子郵件按如下:Python - 識別日期時間字符串並確保其日期時間可讀格式

06:00 Wednesday 22ndFebruary 2017 

有22日和二月之間沒有空格,因此,當函數運行得到超時的身體我得到了錯誤

Traceback (most recent call last): 
    File "email_processing.py", line 137, in <module> 
    e_start_time, e_end_time = main_dt(content) 
    File "email_processing.py", line 26, in main_dt 
    date = dateutil.parser.parse(re.search(pattern, data).group(0)) 
    File "/usr/lib/python2.7/site-packages/dateutil/parser.py", line 1168, in parse 
    return DEFAULTPARSER.parse(timestr, **kwargs) 
    File "/usr/lib/python2.7/site-packages/dateutil/parser.py", line 559, in parse 
    raise ValueError("Unknown string format") 
ValueError: Unknown string format 

我目前的功能是按照下面的,任何人都可以想到的驗證它的方法/確保有地方需要有空間?考慮到字符串中可能存在空間問題,並且日期會隨着更多電子郵件的進入而發生變化?

由於

def main_dt(data): 
    dates = [] 
    for pattern in ['(?<=Start Time & Date:).*', '(?<=Completion Time & Date:).*']: 
     try: 
      date = dateutil.parser.parse(re.search(pattern, data).group(0)) 
     except: 
      print re.search(pattern, data).group(0) 
     dates.append(date) 
    return dates 

樣品體:

Dear Customer, 

(Call Transferred) We are writing to inform you of planned engineering work taking place which could impact your service. 

The affected site is : XXXXXX 

Maintenance window: 

Start Time & Date: 01:00 Wednesday 22nd February 2017    
Completion Time & Date: 06:00 Wednesday 22ndFebruary 2017     

Details of Work: 
... 
+0

你總是可以用'try - except'來捕捉異常嗎? –

+0

我按照上面的說明,但我需要格式化正確的異常,這就是我不知道該怎麼做 – AlexW

+0

[谷歌搜索將做](https://docs.python.org/3/tutorial/ errors.html#處理的例外)。 py2 –

回答

1

這更是一個正則表達式的問題。

的部分你捕捉異常,請確保您重新使用不正確的數據:

validation_pattern = '(.*\\d+[a-z]{2})([A-Z].*)' 
    try: 
     date = dateutil.parser.parse(re.search(pattern, data).group(0)) 
    except: 
     dirty_data_group = re.search(pattern, data).group(0) 
     tidy_data_group = re.sub(validation_pattern, r'\1 \2', dirty_data_group) 
     date = dateutil.parser.parse(tidy_data_group) 

這應該在陣列中的每個時間得到正確的日期。然而,這僅限於您所指的具體問題,即在每月的當天和月份之間沒有空間。

+0

@AlexW請您檢查一下是否適用於您? –

+0

明白了!希望這會持續一段時間,然後我的方式發送一個新的錯誤 – AlexW

相關問題