【问题标题】:How to get part of string and pass it to other function in python?如何获取字符串的一部分并将其传递给python中的其他函数?
【发布时间】:2014-06-01 12:35:23
【问题描述】:

我的任务是验证字符串是否是有效的日期和时间。

“2013-01-01W23:01:01”

日期和时间用符号“W”或空格分隔。 如何获取字符串的第一部分 - “2013-01-01”并将其传递给函数 valid_date(value) 并将第二部分“23:01:01”传递给其他函数 valid_time(value) 我试过了:

def is_datetime(value):
    if(value.find[' '] >= 0):
        return is_date(value[:value.find[' '] - 1]) and is_time(value[value.find[' '] + 1:])\

但显然我不允许这样做?

【问题讨论】:

    标签: python string function


    【解决方案1】:

    使用str.partition() 快速获取第一部分:

    value.partition('W')[0]
    

    对于 str.split()。将拆分限制为仅第一个 W

    value.split('W', 1)[0]
    

    任何一种技术都会产生结果,即使value 中没有'W' 字符。

    演示:

    >>> value = "2013-01-01W23:01:01"
    >>> value.partition('W')[0]
    '2013-01-01'
    >>> value.split('W', 1)[0]
    '2013-01-01'
    

    【讨论】:

    • 如果partitionsplit 都可用,比如在Python 3 中,它们会在哪里使用?只是好奇。
    • @AlexThornton:当只拆分一次以获得第一部分或最后一部分时,str.partition() 速度更快,并且具有始终返回 3 元素列表的额外好处。这可以使许多用例更容易。
    • @AlexThornton: 和 str.split()str.partition() 都可以从 Python 2.5 开始使用。
    【解决方案2】:

    你可以试试这个,

    >>> a="2013-01-01W23:01:01"
    >>> a.split('W')
    ['2013-01-01', '23:01:01']
    

    然后将a.split('W')[0]a.split('W')[1] 发送到验证函数。

    【讨论】:

      【解决方案3】:

      如果你不确定它是否是一个有效的日期或时间,你应该使用正则表达式来验证字符串,那么你甚至不需要调用is_timeis_date

      import re
      pattern = re.compile("^(\d{4}-\d{2}-\d{2})[W ](\d{2}:\d{2}:\d{2})$")
      # ...
      value = "2013-01-01W23:01:01"
      match = pattern.findall(value)
      if match:
        pass #is valid
      

      这将测试某些东西是否看起来像日期和时间。

      您当然可以使用更高级的正则表达式。

      ^(\d{4}-(11|12|0\d)-(3[10]|[12]\d))[W ]((2[0-3]|[01]\d):[0-5]\d:[0-5]\d)$
      

      这一项测试有效的日期和时间值(因此它不再匹配 27:99:01),但仍匹配无效日期,例如 2014-02-31。如果您想排除这些情况,您可以访问匹配的相关部分作为 match 变量的项目,并测试一个月的天数和闰年等内容。

      【讨论】:

        【解决方案4】:

        如果您只需要检查您指定格式的字符串是否是有效的日期时间,则无需将其拆分并将值传递给一些手工函数,只需使用此:

        from datetime import datetime
        
        try:
            valid_datetime = datetime.strptime('2013-01-01W23:01:01', '%Y-%m-%dW%H:%M:%S')
            print 'this datetime is valid'
        except ValueError:
            print 'this datetime is invalid'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-08-11
          • 2020-12-29
          • 1970-01-01
          • 2020-04-03
          • 1970-01-01
          • 2015-04-03
          • 2020-04-10
          • 1970-01-01
          相关资源
          最近更新 更多