【问题标题】:MM/DD/YYYY Date to variable conversion m,d, and yMM/DD/YYYY 日期到变量转换 m、d 和 y
【发布时间】:2016-05-13 02:06:57
【问题描述】:

我正在努力寻找将用户输入的日期作为 mm/dd/yyyy 转换为 3 个变量的最佳方法。我无法拆分它,因为我收到一个错误,因为它是一个“浮点数”。

>>> date=3/2/2016
>>> date.split('/')
Traceback (most recent call last):
  File "<pyshell#152>", line 1, in <module> date.split('/')
AttributeError: 'float' object has no attribute 'split'

我需要添加什么以确保它不会评估除法日期?

def main():
    date=input("Enter date mm/dd/yyyy: ") 

我希望输入日期为 mm/dd/yyyy,然后将其转换为 3 个变量,如 m=month d=day y=year

最好的方法是什么?

【问题讨论】:

  • 我不理解您的输入数据或错误信息。请提供样本。
  • >>> date=3/2/2016 >>> date.split('/') Traceback(最近一次调用最后一次):文件“”,第 1 行,在 date.split('/') AttributeError: 'float' object has no attribute 'split' >>>
  • 我认为应该是 date='3/2/2016' 问题是 python 正在做除法并创建浮点数 0.000744047619047619 而不是作为字符串输入
  • def main(): date=input("输入日期 mm/dd/yyyy:")

标签: python date datetime


【解决方案1】:

试试str.split:

>>> test_date = "05/12/2016"
>>> month, day, year = test_date.split('/')
>>> print(f"Month = {month}, Day = {day}, Year = {year}")
Month = 05, Day = 12, Year = 2016

【讨论】:

    【解决方案2】:

    我写了下面这段代码,它工作得很好。

    >>> date='3/2/2016'
    >>> new=date.split('/')
    >>> new
    ['3', '2', '2016']
    >>> 
    >>> m,d,year=new
    >>> m
    '3'
    >>> d
    '2'
    >>> year
    '2016'
    >>> 
    

    正如 Jessica Smith 已经指出的那样,date=3/2/2016 计算表达式并将数字相除。必须是string字符串类型才能被拆分。

    【讨论】:

      【解决方案3】:

      错误 "'float' object has no attribute 'split'" 表明您的示例中的 type(date) == float 暗示您正在尝试使用 Python 2 解释器运行 Python 3 代码,其中 @987654324 @ 将其输入计算为 Python 表达式,而不是将其作为字符串返回。

      要在 Python 2 上以字符串形式获取日期,请使用 raw_input() 而不是 input()

      date_string = raw_input("Enter date mm/dd/yyyy: ") 
      

      要使其同时在 Python 2 和 3 上运行,请在脚本顶部添加:

      try: # make input() and raw_input() to be synonyms
          input = raw_input
      except NameError: # Python 3
          raw_input = input
      

      如果您需要旧的 Python 2 input() 行为;你可以显式调用eval()

      要验证输入日期,您可以use datetime.strptime() 并捕获ValueError

      from datetime import datetime
      
      try:
          d = datetime.strptime(date_string, '%m/%d/%Y')
      except ValueError:
          print('wrong date string: {!r}'.format(date_string))
      

      .strptime() 保证输入日期有效,否则引发ValueError。成功后,d.yeard.monthd.day 按预期工作。

      将它们放在一起(未经测试):

      #!/usr/bin/env python
      from datetime import datetime
      
      try: # make input() and raw_input() to be synonyms
          input = raw_input
      except NameError: # Python 3
          raw_input = input
      
      while True: # until a valid date is given
          date_string = raw_input("Enter date mm/dd/yyyy: ") 
          try:
              d = datetime.strptime(date_string, '%m/%d/%Y')
          except ValueError: # invalid date
              print('wrong date string: {!r}'.format(date_string))
          else: # valid date
              break 
      
      # use the datetime object here
      print("Year: {date.year}, Month: {date.month}, Day: {date.day}".format(date=d))
      

      Asking the user for input until they give a valid response

      如果必须,您可以使用 .split('/') 代替 .strptime()

      month, day, year = map(int, date_string.split('/'))
      

      它不验证这些值是否构成公历中的有效日期。

      【讨论】:

        【解决方案4】:

        试试:

        def main():
            month, day, year = [int(x) for x in raw_input("Enter date mm/dd/yyyy: ").split('/')]
            print "Month: {}\n".format(month), "Day: {}\n".format(day), "Year: {}".format(year)
        
        main()
        

        输出:

        Enter date mm/dd/yyyy: 03/09/1987
        Month: 3
        Day: 9
        Year: 1987
        

        【讨论】:

          猜你喜欢
          • 2017-08-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-10
          • 2023-03-27
          • 1970-01-01
          • 2020-06-11
          相关资源
          最近更新 更多