2011-11-01 115 views
2

我正在尝试更改文本文件中的日期格式,以便它可以按年,月和日以逗号分隔。目前,它是在YYYY-MM-DD格式,我试图取代用逗号连字号,而不会影响文件中的其他复姓文本:Python:使用正则表达式更改日期格式

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}') 

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

回答

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

非常感谢。这一个帮助了很多。在这个过程中的这一点上,我们正在进行字符串操作,并且我无法想出一种方法将其余部分与编辑后的部分结合起来。 – kencon06

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}

+0

我会尝试这个方法进行,以及为未来的项目,我有涉及输入和输出。我不确定要做什么涉及正则表达式和什么。 Python初学者。 – kencon06

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'