Python 转换一个月';将其名称添加到相应的编号

Python 转换一个月';将其名称添加到相应的编号,python,date,Python,Date,我有一个包含条目列表的文件,日期包含“一月”、“二月”、“三月”等 我想要 2012年1月23日01:42 成为 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'

我有一个包含条目列表的文件,日期包含“一月”、“二月”、“三月”等

我想要

2012年1月23日01:42

成为

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行的整个文件,并自动将月份更改为一个数字。谢谢。

有两种可能:

  • 模块
  • 像你一样的DIY解决方案
  • python文档值得一读,您可能会发现一种比回答这个问题更简单的方法

    至于DIY解决方案,似乎有很多重复代码,而且不需要正则表达式。你可以这么做

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

    其中,
    months
    是月份列表

    您还可以使用字典:

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

    使用regexpes可以使用简单的string
    replace()
    方法,而无需首先检查字符串中是否有月份名称。我不知道字符串
    Jan
    是否可以位于输入字符串的其他部分,但在我看来,将
    -Jan-
    替换为
    -01-
    日期时间是比较安全的答案,例如:

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

    检查位于

    的格式指令检查这个:我应该提到,我希望它遍历大约100行的整个文件,并自动将月份更改为数字。对,但这是另一个问题,不是吗?最好将关于日期操作的SO问题和关于文件IO的问题分开,这样可以得到更灵活的解决方案。Datetime具有区域设置意识,因此是一个更好的解决方案。