0

我有一个 Python 3.2.2 程序,其中有一个类似这样的列表:

['January 26, 1991', 'February 29, 2012', 'December 10, 2094']

如果不使用一百万个“if”语句,我如何获取列表并更改它或创建一个如下所示的新列表:

['01261991', '02292012', '12102094']

基本上将完整的日期格式转换为 mmddyyyy 格式?

我在这里查看了各种其他问题,但似乎找不到这样的问题。如果有人能指出我正确的方向,那就太好了!

4

7 回答 7

1

如果你不想使用任何modules你可以试试这个:

dates=['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
def converter(x):
   x=x.split()
   dic={'January':'01','February':'02','March':'03','April':'04','May':'05','June':'06',
         'July':'07','August':'08','September':'09','October':'10','November':'11','December':'12'
        }
   month,day,year=dic[x[0]],x[1][:-1],x[2]
   if len(day)==1:
     day='0'+day

   return month+day+year

new_lis=[]

for x in dates:
   new_lis.append(converter(x))

print(new_lis)

['01261991', '02292012', '12102094']
于 2012-05-05T01:27:57.737 回答
1

Python 至少有两个处理时间的模块。(第一个是time,第二个是datetime)。具体看看哪些是从字符串创建“时间对象”strftime然后strptime从“时间对象”创建字符串的方法。

另请注意,在 python 中,列表通常表示为 '[ item1, item2, ... ]' (方括号,而不是大括号——大括号用于字典 ...)。

最后,您最终想要的日期字符串不符合与其他 2 个相同的规则......

于 2012-05-05T00:54:01.253 回答
1

对于时间操作,您通常应该查看标准库中的时间日期时间模块。

>>> import time
>>> raw_string_list = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
>>> struct_time_list = [time.strptime(raw_string, '%B %d, %Y') for raw_string in raw_string_list]
>>> final_list = [time.strftime('%m%d%Y', struct_time) for struct_time in struct_time_list]
>>> final_list
['01261991', '02292012', '12102094']

对于这种情况,我们使用time模块的 2 个函数:strptime将字符串转换回 time.struct_time 并将strftime其转换回新字符串。

于 2012-05-05T01:38:10.610 回答
1

我会使用内置的 datetime 模块,特别是strptime 和 strftime。利用映射将转换函数应用于列表的每个元素,您可以这样做:

#!/usr/bin/env python

from datetime import datetime

dateList = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']

def convertDate(dateString):
    dt = datetime.strptime(dateString,"%B %d, %Y")
    return dt.strftime("%m%d%Y")

print map(convertDate,dateList)
于 2012-05-05T01:43:55.357 回答
0

您确实想要strptimeand strftime:我认为这p是“过程”,而 thef是格式。

它们都采用格式字符串和参数来根据该字符串进行处理。这些str*time函数的历史可以追溯到 C 语言,python 所拥有的与原始函数非常直接相关,只是它更好。

我说它更好,因为如果你观察strptimestrftime行为,你会发现格式字符串有自己的迷你语言,而且它几乎不够直观,足以让你犯下难以发现的严重错误。(例如,我仍然需要查看分钟是大写还是小写 m。)

此外,如果您使用的是 Linux(也许是 OSX?)man strptime,我发现比 python 文档更有帮助。对于strftime.

于 2012-05-05T01:26:03.700 回答
0

首先,将字符串分成三个块:

'January 26, 1991'.split()    # results in ['January', '26,', '1991']

二、使用字典将月份名称转为两位数:

months = {'January':'01', 'February':'02'}
months['January']     # results in '01'

第三,去掉一天中的逗号,确保它是两位数。

第四,重新组合月+日+年以获得最终结果。

第五,将其包装成一个函数并将该函数应用于列表中的每个元素。

于 2012-05-05T01:29:51.927 回答
0

以下 Python 代码将完成您的任务:

#! /usr/bin/env python
from time import strptime, strftime
input = ['January 26, 1991', 'February 29, 2012', 'December 10, 2094']
date_list = []
output = []

for i in input:
    date_list.append(strptime(i, '%B %d, %Y'))

for dd in date_list:
    output.append(strftime('%m%d%Y', dd))
于 2012-05-05T01:40:39.097 回答