【问题标题】:Python: Changing date format using regexPython:使用正则表达式更改日期格式
【发布时间】:2011-11-01 00:40:37
【问题描述】:

我正在尝试更改文本文件中的日期格式,以便它可以按年、月和日以逗号分隔。目前,它是 YYYY-MM-DD 格式,我正在尝试用逗号替换连字符而不影响文件中的其他连字符:

2011-1-1,59,44,29,55,42,26,93,80,66,30.15,30.05,29.96,10,8,4,14,3,22,T,7,Rain,201,39.2,76.7,KBWI
2011-1-26,35,34,32,34,31,25,100,82,64,30.04,29.79,29.54,9,2,0,22,11,29,1.82,8,Fog-Rain-Snow-Thunderstorm,23,39.2,76.7,KBWI #I dont want to remove the hyphens for the weather events

一位朋友告诉我使用正则表达式和这个表达式:

re.findall('[\d]{4}-[\d]{1,2}-[\d]{1,2}')

它确实找到了所有用连字符格式化的日期的模式,但我不知道如何用这个匹配的文本文件中的所有行用逗号替换连字符。我正在考虑用编辑过的数据创建一个新的文本文件,以便我可以在另一个应用程序中使用它。任何帮助将不胜感激。

【问题讨论】:

    标签: python regex


    【解决方案1】:

    使用fileinput 是“就地”更改文件的便捷方式:

    import fileinput
    import re
    import sys
    
    for line in fileinput.input(filename,inplace=True):
        sys.stdout.write(re.sub(r'(\d{4})-(\d{1,2})-(\d{1,2})',r'\1,\2,\3',line))
    

    re.sub 用于用逗号替换连字符。第一个正则表达式模式仅匹配日期,而行中的其他连字符保持不变。第二个参数r'\1,\2,\3' 告诉re.sub 将匹配的文本替换为第一个匹配组\d{4},后跟一个逗号,然后是第二个匹配组\d{1,2},然后是另一个逗号,然后是第三个匹配组, \d{1,2}.

    【讨论】:

    • 我会在未来的项目中尝试这种方法,因为我必须涉及输入和输出。我不确定如何处理涉及正则表达式之类的东西。 Python 初学者。
    【解决方案2】:

    不使用正则表达式很简单:

    in = open("inputfile", "r")
    out = open("outputfile", "w")
    
    for line in in:
        line = line.split(",", 1)
        line[0] = line[0].replace("-", ",")
        out.write(','.join(line))
    
    in.close()
    out.close()
    

    【讨论】:

    • 非常感谢。这个帮了大忙。在本课程的这一点上,我们正在进行字符串操作,我想不出一种方法将字符串的其余部分与已编辑的部分连接起来。
    【解决方案3】:

    \d 条目周围不需要方括号。

    尝试使用re.sub 和组号进行替换操作:

    >>> d = '2011-1-1,59,44,29,55,42,26,93,80,66,30.15,30'
    >>> re.sub(r'(\d{4})-(\d{1,2})-(\d{1,2})', r'\1,\2,\3', d)
    '2011,1,1,59,44,29,55,42,26,93,80,66,30.15,30'
    

    【讨论】:

      猜你喜欢
      • 2011-12-31
      • 1970-01-01
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-09
      相关资源
      最近更新 更多