如何使用"m/d/yy"格式修剪时间戳内的空格



我有一个从其他数据源生成.csv文件的Python脚本。

目前,当用户意外手动向日期添加空格时,会发生错误。不要将日期输入为"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) 

如何修剪月份前面的空间问题,以及日期的其他组成部分(日和年)以及将来的空间问题?

提前谢谢。

由于您正在处理日期,因此在这里使用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
你也可以

使用 python-dateutil 库中的parser。您将获得的主要好处 - 它可以为您识别日期时间格式(有时它可能很有用):

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")

再一次,这是使用splitstripjoin的绝佳机会:

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'

最新更新