【问题标题】:How to trim spaces within timestamps using 'm/d/yy' format如何使用“m/d/yy”格式修剪时间戳中的空格
【发布时间】:2017-01-19 19:12:43
【问题描述】:

我有一个 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) 

我如何在月份前面以及可能在日期的其他部分(日和年)以及未来的空间问题上修整?

提前致谢。

【问题讨论】:

    标签: python datetime trim


    【解决方案1】:

    由于您正在处理日期,因此在此处使用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
    

    【讨论】:

      【解决方案2】:

      您也可以使用来自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")
      

      【讨论】:

        【解决方案3】:

        又是一个使用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'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多