将月份名称转换为相应的数字

时间:2012-04-23 10:07:15

标签: python date

我有一个包含条目列表的文件,日期包含“Jan”,“Feb”,“Mar”等。

我想要

  

569207,ngph,RUN,512,16, 2012-Jan-23 01:42 ,2012-04-23 10:53

成为

  

569207,ngph,RUN,512,16, 2012-01-23 01:42 ,2012-04-23 10:53。

我写了以下内容:

   for line in f:
        if re.search(r'Jan', line):
            f1.write(line.replace('Jan', '01'))
        elif re.search(r'Feb', line):
            f1.write(line.replace('Feb', '02'))
        elif re.search(r'Mar', line):
            f1.write(line.replace('Mar', '03'))
        elif re.search(r'Apr', line):
            f1.write(line.replace('Apr', '04'))
        elif re.search(r'May', line):
            f1.write(line.replace('May', '05'))
        elif re.search(r'Jun', line):
            f1.write(line.replace('Jun', '06'))
        elif re.search(r'Jul', line):
            f1.write(line.replace('Jul', '07'))
        elif re.search(r'Aug', line):
            f1.write(line.replace('Aug', '08'))
        elif re.search(r'Sep', line):
            f1.write(line.replace('Sep', '09'))
        elif re.search(r'Oct', line):
            f1.write(line.replace('Oct', '10'))
        elif re.search(r'Nov', line):
            f1.write(line.replace('Nov', '11'))
        elif re.search(r'Dec', line):
            f1.write(line.replace('Dec', '12'))

哪个有效,但是有更清洁的方法吗?我希望它遍历大约100行的整个文件,并自动将月份更改为数字。感谢。

3 个答案:

答案 0 :(得分:12)

两种可能性:

  1. datetime模块
  2. 像你这样的DIY解决方案
  3. python文档值得一读,你可能会发现一种更简单的方法来做更多的事情而不仅仅是回答这个问题。

    对于DIY解决方案,您似乎有很多重复代码,并且不需要正则表达式。你可以做到

    for i, month in enumerate(months,1): 
        line.replace(month, str(i))
    

    其中months是月份列表。

答案 1 :(得分:8)

datetime就是答案,例如:

>>> import datetime
>>> datetime.datetime.strptime('Mar 2013',"%b %Y")
datetime.datetime(2013, 3, 1, 0, 0)

检查http://docs.python.org/2/library/datetime.html

处的格式指令

答案 2 :(得分:2)

您也可以使用字典:

month_numbers = {'-Jan-': '-01-', '-Feb-': '-02-', ...}
for k, v in month_numbers.items():
    line = line.replace(k, v)
print(line)

您可以使用正则表达式,您可以使用简单的字符串replace()方法,而无需先检查月份名称是否在字符串中。我不知道字符串Jan是否可以在输入字符串的其他部分,但IMO将-Jan-替换为-01-更安全。