2010-03-18 5 views
0

Je suis un débutant en Python. Je veux soustraire l'intervalle de temps de mon fichier journal, mais le problème est que je ne peux pas convertir la chaîne milliseconde du fichier journal en format datetime. Par exemple, j'ai 15: 55: 05.12345 et je veux supprimer 5.12345 secondes de cette chaîne, et montrer le résultat de 15.55.00.00000 en Python. Comment puis je faire ça? Actuellement, j'utilise python 2.5.convertir chaîne de milliseconde en datetime en python

Merci d'avance.

Désolé, je voulais dire que je veux soustraire la valeur par exemple, supprimer 00: 00: 05,1000 donc, je devrais obtenir 15:55:00:02345

Répondre

1
>>> import datetime 
>>> s = '15:55:05.12345' 
>>> datetime.datetime.strptime(s.rpartition('.')[0], '%H:%M:%S').strftime('%H.%M.00.00000') 
'15.55.00.00000' 

modifier après la clarification:
il n'y a aucun moyen de le faire avec la bibliothèque standard de Python, ne travaillant directement avec des cordes:

>>> s[:6]+ '00' + s[-6:] 
'15:55:00.12345' 
+0

Désolé, je veux dire que je veux substact valeur par exemple, supprimer 00: 00: 05,1000 donc, je devrais obtenir 15: 55: 00: 02345 – newbie

+0

Je dois traiter les énormes fichiers journaux. Je ne peux pas aller régler toutes les valeurs de chaînes manuellement. Avez-vous d'autres suggestions que je peux faire pour résoudre ce problème? – newbie

+0

@newbie: Je ne comprends pas votre objection? qui dit que vous devriez le faire manuellement? – SilentGhost

0

Je vois que vous devez soustraire de la valeur, donc j'utiliser timedelta des objets parce que yo Tu peux faire des maths avec ceux-là.

>>> value = '15:55:05.123450' 
>>> m = re.match('(\d+):(\d+):(\d+\.\d+)', value) 
>>> hour = int(m.group(1)) 
>>> min = int(m.group(2)) 
>>> sec = float(m.group(3)) 
>>> now = datetime.timedelta(hours=hour,minutes=min,seconds=sec) 
>>> str(now) 
'15:55:05.123450' 
>>> 
>>> delta = datetime.timedelta(seconds=5.1) 
>>> 
>>> earlier = (now - delta) 
>>> str(earlier) 
'15:55:00.023450' 
>>>