J'étais en train de gratter quelque chose et j'avais du mal à traiter le temps écoulé, alors j'ai pris une note. Connaissez-vous la notation d'un tel chronomètre? "X'yy" z "signifie" x minutes yy.z secondes ". Cette fois, je veux convertir cette chaîne de caractères (type str) en secondes (type float) en utilisant python. Par exemple La conversion est de "1'45" 5 "-> 105,5 secondes.
Dans le programme, le type de chaîne de caractères de python est décrit par 'hoge'
ou"hoge"
, mais cette fois la notation" x'yy "z" est "'", "" "dans la chaîne de caractères. Sera inclus. Dans un tel cas, la chaîne de caractères python est gérée en utilisant \
, et la notation est `` x \ 'yy "z'`.
Si cela est transformé en un type datetime à l'aide de strptime, ce sera comme suit.
from datetime import datetime
# %M correspond aux minutes,%S correspond aux secondes,%f est des microsecondes
strtime = '1\'45"5' #Chaîne
t = datetime.strptime(strtime, '%M\'%S"%f')
print('t:', t)
print('type:', type(t))
# Output
# t: 1900-01-01 00:01:45.500000
# type: <class 'datetime.datetime'>
Avec cela seul, étant donné que datetime est un type de date, il sera 0: 01: 45: 500 000 microsecondes le 1er janvier 1900. Cette fois, je veux le traiter comme "heure" au lieu de date, donc ce n'est pas suffisant. Par conséquent, il est converti en type timedelta.
timedelta signifie "heure" au lieu de "date", car il est utilisé pour ajouter et soustraire des dates et des heures. Cependant, comme il n'est pas possible de convertir directement à partir de la chaîne de caractères, le type datetime est renvoyé. La conversion du type datetime au type timedelta est la suivante.
from datetime import timedelta
t_delta = timedelta(
seconds=t.second, #datetime type t secondes sont stockées
microseconds=t.microsecond, #Type de date / heure t les microsecondes sont stockées
minutes=t.minute, #Type de date / heure t minutes sont stockées
)
print('t_delta:', t_delta)
print('type:', type(t_delta))
# Output
# t_delta: 0:01:45.500000
# type: <class 'datetime.timedelta'>
Vous pouvez voir que dans le type timedelta, ce n'est pas une date mais est traité comme 1 minute 45 secondes 5 comme heure.
Enfin, 1 minute 45 secondes 5 est convertie en secondes uniquement.
Bien sûr, vous pouvez écrire la programmation manuellement, mais timedelta a une méthode appelée total_seconds ()
, qui peut être convertie en secondes en un seul coup!
tdl2sec = t_delta.total_seconds()
print(tdl2sec)
print(type(tdl2sec))
#Output
# 105.5
# <class 'float'>
Atteint un objectif heureux! !!
Recommended Posts