Python:使用正则表达式更改日期格式
我想把一个文本文件里的日期格式改成用逗号分隔的格式,具体是按年、月、日来分。现在的格式是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 个回答
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
使用 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
不使用正则表达式的方法很简单:
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()