2017-01-19 69 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'