我有一个Python脚本,可以从其他数据源生成.csv文件。
目前,当用户手动向日期添加空格时,会发生错误。而不是将日期输入为“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 :(得分: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 :(得分:1)
您还可以使用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")
答案 2 :(得分:0)
再一次,使用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'