在Python中,如何从列表中读取日期(dd / mm / yyyy)并将其更改为月份名称?

时间:2015-07-07 18:43:51

标签: python datetime

implicit class IntContext(val sc: StringContext) {
  def i(args: Any*): Int = {
    val orig = sc.s(args: _*)
    orig.replace(" ", "").toInt
  }
}

i"1 000 000" // res0: Int = 1000000

您如何获取此列表并阅读日期并将其更改为仅写出月份,例如2015年2月23日阅读二月或2015年3月2日阅读三月?

日期不断变化,所以我只想读取第一个数字并制作 ['Time Period >>', '2/23/2015', '3/2/2015', '3/9/2015', '3/16/2015', '3/23/2015', '3/30/2015', '4/6/2015', '4/13/2015'] 语句,将其更改为与数字对应的月份。

5 个答案:

答案 0 :(得分:6)

您可以使用datetime模块执行此操作。

示例 -

import datetime
datestring = '2/23/2015'
d = datetime.datetime.strptime(datestring ,'%m/%d/%Y')
d.strftime('%B')
>>> 'February'

或一行 -

import datetime
datestring = '2/23/2015'
datetime.datetime.strptime(datestring ,'%m/%d/%Y').strftime('%B')
>>> 'February'

答案 1 :(得分:1)

我们将使用strptime将您的字符串转换为datetime对象。然后我们会使用strftime将这些转换为仅显示月份的字符串。

这比构建月/数字组合字典更容易。它确实要求所有日期字符串具有相同的格式。我对此的假设是form.action

onclick

在这里,您可以看到我循环遍历您的字符串列表,但忽略了第一个值(因为它不是您示例中的日期)。每个都转换为日期时间,然后返回到月份,显示为字符串。

答案 2 :(得分:0)

另一种方法是使用字典,其中keys是月份编号,values是月份名称。遍历每个项目,并将字符串拆分为/,然后获取第一个元素,即月份编号。然后使用月号引用字典以获取其对应的名称。

monthDictionary = {'1': 'January', '2': 'February', '3': 'March', '4': 'April', '5': 'May',
                   '6': 'June', '7': 'July', '8': 'August', '9':'September', '10':'October',
                   '11': 'November', '12': 'December'}

l = ['Time Period >>', '2/23/2015', '3/2/2015', '3/9/2015', '3/16/2015', '3/23/2015', '3/30/2015', '4/6/2015', '4/13/2015']

for d in l[1:]:
    monthNum = d.split('/')[0]
    print monthDictionary[monthNum]

答案 3 :(得分:0)

如果您知道输入有效,那么您可以使用更高效的代码(如果需要):

In [1]: import calendar

In [2]: from datetime import datetime

In [3]: dates = ['2/23/2015', '3/2/2015', '3/9/2015', '3/16/2015', '3/23/2015', '3/30/2015', '4/6/2015', '4/13/2015']

In [4]: %timeit [datetime.strptime(s, "%m/%d/%Y").strftime('%B') for s in dates]                          
The slowest run took 1373.48 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 128 µs per loop

In [5]: %timeit [calendar.month_name[int(s.partition('/')[0], 10)] for s in dates]
10000 loops, best of 3: 32.3 µs per loop

calendar.month_name[int(s.partition('/')[0], 10)]明显更快。

答案 4 :(得分:-1)

我只是创建一个函数,然后迭代列表并调用函数传递日期。

def dateToMonth(date):
     months = {1:"Jan", 2:"Feb", 3:"Mar"}
     month = date.split("/")[0]

     return months[int(month)]

这个函数的作用是接受你的字符串日期,根据'/'字符的位置将它分成一个数组。

然后它在字典中查找“02”转换为一个int,它返回到月[2]并返回“Feb”