2017-01-19 26 views
3

我有一個Python腳本可以從其他數據源生成.csv文件。如何使用'm/d/yy'格式修剪時間戳中的空格

目前,當用戶手動爲日期手動添加空間時發生錯誤。而不是輸入日期作爲「1/13/17」,可能會在前面添加空格(「1/13/17」),以便在月份前面有一個空格。

以下附上我的Python腳本的相關部分:

def processDateStamp(sourceStamp): 
    matchObj = re.match(r'^(\d+)/(\d+)/(\d+)\s', sourceStamp) 
    (month, day, year) = (matchObj.group(1), matchObj.group(2), matchObj.group(3)) 
    return "%s/%s/%s" % (month, day, year) 

如何修剪在前面的空間的問題和可能的日期(日期和一年中的其他組件)以及未來?

在此先感謝。

回答

0

使用.strip()方法。

>>> ' Hello World '.strip() 
'Hello World' 
>>> ' Hello World'.strip() 
'Hello World' 
+0

*「我如何修剪在一個月前的空間問題* ***,並可能對OT (日期和年份)*** *以及未來?「*如果在一天或一年前有空間:」1/13/17「或」1/13/17「 ? – Tagc

+0

在這種情況下,你的答案已經足夠好了。 –

4

既然你處理日期,它可能更適合用在這裏datetime.strptime比正則表達式。這種方法有兩個優點:

  • 它讓任何人都明白,你試圖解析日期會更清晰。
  • 當您嘗試解析不代表日期的數據或以不正確的格式表示日期時,您的代碼將更容易引發異常 - 這很好,因爲它可以幫助您捕獲並解決可能會被忽視的問題

下面的代碼:

from datetime import datetime 


def processDateStamp(sourceStamp): 
    date = datetime.strptime(sourceStamp.replace(' ', ''), '%M/%d/%y') 
    return '{}/{}/{}'.format(date.month, date.day, date.year) 


if __name__ == '__main__': 
    print(processDateStamp('1/13/17'))  # 1/13/17 
    print(processDateStamp(' 1/13/17')) # 1/13/17 
    print(processDateStamp(' 1 /13 /17')) # 1/13/17 
1

您還可以使用parserpython-dateutil庫。你會得到的主要好處 - 它可以識別你的日期時間格式(有時也可能是有用的):再次

from dateutil import parser 
from datetime import datetime 

def processDateTimeStamp(sourceStamp): 
    dt = parser.parse(sourceStamp) 
    return dt.strftime("%m/%d/%y") 

processDateTimeStamp(" 1 /13/17") # returns 01/13/17 
processDateTimeStamp(" jan/13/17") 
processDateTimeStamp(" 1 - 13 - 17") 
processDateTimeStamp(" 1 .13 .17") 
0

,使用的絕佳機會splitstrip,並且join

def remove_spaces(date_string): 
    date_list = date_string.split('/') 
    result = '/'.join(x.strip() for x in date_list) 
    return result 

例子

In [7]: remove_spaces('1/13/17') 
Out[7]: '1/13/17' 

In [8]: remove_spaces(' 1/13/17') 
Out[8]: '1/13/17' 

In [9]: remove_spaces(' 1/ 13/17') 
Out[9]: '1/13/17'