Python:使用正则表达式更改日期格式

时间:2011-11-01 00:40:37

标签: python regex

我正在尝试更改文本文件中的日期格式,以便可以按年,月和日以逗号分隔。目前,它是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}')

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

3 个答案:

答案 0 :(得分:2)

使用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}

答案 1 :(得分:1)

\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'

答案 2 :(得分:1)

不使用regexp很简单:

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()