제목과 같은 상황이 필요해서 찾아봤지만 pandas.Timedelta() 를 제외하고는 찾아보기 힘들었습니다. pandas 모듈을 쓰지 않으면 수동으로 파싱하는 루틴을 만들어야 했습니다.
그래서 편하게(?) 이용할 수 있는 방법을 찾고 또 테스트했습니다.
import pandas
import datetime
def str_to_timedelta(delta: str = None):
if not str:
return
ptd = pandas.Timedelta(str)
td = pandas.Timedelta.to_pytimedelta(ptd)
return td
def str_to_timedelta2(delta: str = None):
if not str:
return
return pandas.Timedelta(str).to_pytimedelta()
참고로 예외 처리가 전혀 되어 있지 않습니다. 당장 테스트 해보니 예약어가 아닌 문자가 들어있으면 ValueError 가 발생합니다.
>>> pandas.Timedelta("3kfjkasd")
Traceback (most recent call last):
File "pandas/_libs/tslibs/timedeltas.pyx", line 513, in pandas._libs.tslibs.timedeltas.parse_timedelta_unit
KeyError: 'kfjkasd'
숫자값 뒤에 단위가 지정되지 않아도 ValueError 가 발생합니다.
>>> pandas.Timedelta("1w2d3t4s5l6u7h8m9n10")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "pandas/_libs/tslibs/timedeltas.pyx", line 1194, in pandas._libs.tslibs.timedeltas.Timedelta.__new__
File "pandas/_libs/tslibs/timedeltas.pyx", line 437, in pandas._libs.tslibs.timedeltas.parse_timedelta_string
ValueError: have leftover units
사용할 수 있는 값은 1주일(1w), 2일(2d), 3분(3t 또는 3m), 4초(4s), 5밀리초(5l), 6마이크로초(6u), 7나노초(7n) 정도가 있습니다.
더 다양한 표현이 있으니, 자세한 내용은 api 글을 참고하시기 바랍니다.
>>> pandas.Timedelta("1w2d3t4s5l6u7h8m9n")
Timedelta('9 days 07:11:04.005006009')
'IT > python' 카테고리의 다른 글
[python3] PIPE 등을 통해 stdin 으로부터 입력 받기 (0) | 2023.01.11 |
---|---|
[python3] 못생긴 연속된 json 데이터 이쁘게 출력하기 cli version (0) | 2023.01.10 |
[python3] 파일 목록 정렬해서 가져오기 (0) | 2022.08.18 |
[python3][opencv][windows 10]개발 환경 구축하기 (0) | 2022.07.22 |
[python] 파일 업로딩용 http 서버 예제 (0) | 2022.04.12 |