2011-11-01 113 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'