我有一个从其他数据源生成.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")
再一次,这是使用split
、strip
和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'