/ / Zmiana formatu daty za pomocą wyrażeń regularnych w Pythonie - python, regex

Zmiana formatu daty za pomocą wyrażeń regularnych w Pythonie - python, regex

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 № 1

zamiast 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"