Próbuję przekonwertować datę w formacie YYYYMMDD
do MM/DD/YYYY
ponieważ jest odczytywany z bazy danych i zapisywany w pliku Excel. Używając Perla, zrobiłbym:
var=~s/([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])([0-9])/$5$6/$7$8/$1$2$3$4/;
Pamiętając o tym, że dzieje się to w strukturze pętli "dla wiersza w wierszach", która jest czytana w bazie danych.
Każda pomoc będzie bardzo doceniana.
Odpowiedzi:
4 dla odpowiedzi № 1zamiast używać wyrażenia regularnego możesz używać pytonów datetime
moduł.
lub możesz połączyć te dwa, ale to tychcesz, ale byłby to bardziej przejrzysty sposób modyfikacji formatowania daty. Python to język, w którym jasność i łatwe czytanie są równie ważne, jak efektywność. patrząc na poniższy kod widać, że modyfikuję datestamp, podczas gdy używanie wyrażenia regularnego jest dość niejasne.
przeczytaj element datetime, a następnie zapisz go, jak chcesz:
>>> from datetime import datetime
>>> datestring = "20121212" # 2012 / 12 /12
>>> datetime.strptime(datestring, "%Y%m%d").strftime("%m/%d/%Y")
"12/12/2012"
2 dla odpowiedzi nr 2
Poszukałbym prostych operacji na ciągach - z pewnością nie mniej wyraźnych ...
>>> s = "20121213"
>>> "/".join( (s[4:6], s[6:], s[:4]) )
"12/13/2012"
w przeciwieństwie do:
>>> re.sub(r"(d{4})(d{2})(d{2})", r"2/3/1", s)
"12/13/2012"
Jeśli jednak zamierzasz nalegać, używając re jak ty "napisałeś poniżej
dateFormatted = row ["TRADE_DATE"] dateFormatted = re.sub (r "(d) (d) (d) (d) (d) (d) (d) (d)", r "56/78/1234", dateFormatted) - user1901341 5 minut temu
Wtedy możesz (ab) użyć formatowania napisów jako takich
>>> "{4}{5}/{6}{7}/{0}{1}{2}{3}".format(*s)
"12/13/2012"
1 dla odpowiedzi nr 3
Nie musisz używać wyrażeń regularnych - Python nie zachęca ich w taki sam sposób, jak robi to Perl - ale możesz oczywiście użyć jednego:
import re
re.sub(r"(d{4})(d{2})(d{2})", r"2/3/1", datestring)
0 dla odpowiedzi nr 4
Myślę, że możesz dostać się do tego po prostu tutaj, bez regex:
>>> s = "20121225"
>>> conv = "/".join((s[6:8], s[4:6], s[0:4]))
>>> conv
"25/12/2012"