Czy wideo nie trwa 1 tydzień, 2 dni, 6 godzin i 21 minut i 32 sekundy?
Youtube pokazuje to jako 222 godziny 21 minut 17 sekund; 1 * 7 * 24 + 2 * 24 + 6 = 222. Nie wiem, skąd pochodzi różnica 17 sekund do 32 sekund; może również być błędem zaokrąglania.
Moim zdaniem, pisanie do tego parsera nie jest takie trudne. Niestety, dateutil
nie wydaje się analizować interwałów, tylko punkty datetime.
Aktualizacja:
widzę, że jest to pakiet do tego, ale tylko jako przykład regexp władzy, zwięzłości i składni niezrozumiały, oto parser dla Ciebie:
import re
# see http://en.wikipedia.org/wiki/ISO_8601#Durations
ISO_8601_period_rx = re.compile(
'P' # designates a period
'(?:(?P<years>\d+)Y)?' # years
'(?:(?P<months>\d+)M)?' # months
'(?:(?P<weeks>\d+)W)?' # weeks
'(?:(?P<days>\d+)D)?' # days
'(?:T' # time part must begin with a T
'(?:(?P<hours>\d+)H)?' # hourss
'(?:(?P<minutes>\d+)M)?' # minutes
'(?:(?P<seconds>\d+)S)?' # seconds
')?' # end of time part
)
from pprint import pprint
pprint(ISO_8601_period_rx.match('P1W2DT6H21M32S').groupdict())
# {'days': '2',
# 'hours': '6',
# 'minutes': '21',
# 'months': None,
# 'seconds': '32',
# 'weeks': '1',
# 'years': None}
I celowo nie liczę dokładnej liczby sekund z tych danych tutaj. Wygląda to banalnie (patrz wyżej), ale tak naprawdę nie jest. Na przykład odległość 2 miesięcy od 1 stycznia wynosi 58 dni (30 + 28) lub 59 (30 + 29), w zależności od roku, natomiast od 1 marca zawsze wynosi 61 dni. Właściwa implementacja kalendarza powinna wziąć to wszystko pod uwagę; do obliczenia długości klipu YouTube, musi być nadmierny.
wow, biorąc pod uwagę, że napisałem własny parser, to po prostu sprawia, że wszystko wydaje się takie łatwe :) dzięki! –
@MorganWilde Jedną z największych zalet Pythona jest to, że zazwyczaj można znaleźć istniejące rozwiązanie, jeśli nie w standardowej bibliotece, a następnie na pypi. Dobrą praktyką jest unikanie implementacji czegokolwiek, jeśli rozwiązanie już istnieje (w dowolnym języku, a nie tylko pytonie). – zstewart