Existe-t-il un moyen facile d'analyser les chaînes de dates HTTP en Python? Selon the standard, il existe plusieurs façons de formater les chaînes de date HTTP; la méthode devrait être capable de gérer cela. En d'autres termes, je souhaite convertir une chaîne du type "Mer, 23 Sep 2009 22:15:29 GMT" en une structure temporelle python.Comment analyser une chaîne de date HTTP en Python?
Répondre
>>> import email.utils as eut
>>> eut.parsedate('Wed, 23 Sep 2009 22:15:29 GMT')
(2009, 9, 23, 22, 15, 29, 0, 1, -1)
Si vous voulez un objet datetime.datetime
, vous pouvez faire:
def my_parsedate(text):
return datetime.datetime(*eut.parsedate(text)[:6])
>>> import datetime
>>> datetime.datetime.strptime('Wed, 23 Sep 2009 22:15:29 GMT', '%a, %d %b %Y %H:%M:%S GMT')
datetime.datetime(2009, 9, 23, 22, 15, 29)
cela ne gérera qu'un seul format! – Agos
oui, et il est assez facile à étendre pour gérer n'importe quel format. alors que 'email.utils.parse' est plus robuste, il est aussi moins transparent. – SilentGhost
% a dépend des paramètres régionaux et ne fonctionne donc généralement pas – stach
httplib.HTTPMessage(filehandle).getdate(headername)
httplib.HTTPMessage(filehandle).getdate_tz(headername)
mimetools.Message(filehandle).getdate()
rfc822.parsedate(datestr)
rfc822.parsedate_tz(datestr)
- si vous avez un flux de données brutes, vous pouvez construire un HttpMessage ou un mimetools. Message de celui-ci. il peut offrir une aide supplémentaire tout en interrogeant l'objet de réponse pour infos
- si vous utilisez urllib2, vous avez déjà un objet HttpMessage caché dans le Filehandler retourné par urlopen
- il peut probablement analyser de nombreux formats de date
- httplib est en le noyau
REMARQUE:
- avait un regard sur la mise en œuvre, HttpMessage hérite de mimetools.Message qui hérite de rfc822.Message. deux defs flottants sont de votre intérêt peut-être, parsedate et parsedate_tz (dans le dernier)
- parsedate (_tz) from email.utils a une implémentation différente, bien que cela ressemble un peu à la même chose.
vous pouvez le faire, si vous avez seulement ce morceau de ficelle et que vous voulez l'analyser:
>>> from rfc822 import parsedate, parsedate_tz
>>> parsedate('Wed, 23 Sep 2009 22:15:29 GMT')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
>>>
, mais laissez-moi exemplifie par des messages mime:
import mimetools
import StringIO
message = mimetools.Message(
StringIO.StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> m
<mimetools.Message instance at 0x7fc259146710>
>>> m.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
ou via Messages http (réponses)
>>> from httplib import HTTPMessage
>>> from StringIO import StringIO
>>> http_response = HTTPMessage(StringIO('Date:Wed, 23 Sep 2009 22:15:29 GMT\r\n\r\n'))
>>> #http_response can be grabbed via urllib2.urlopen(url).info(), right?
>>> http_response.getdate('Date')
(2009, 9, 23, 22, 15, 29, 0, 1, 0)
droite?
>>> import urllib2
>>> urllib2.urlopen('https://fw.io/').info().getdate('Date')
(2014, 2, 19, 18, 53, 26, 0, 1, 0)
là, maintenant nous maintenant plus sur les formats de date, les messages mime, des outils de mime et leur mise en œuvre pythonique ;-)
quel que soit le cas, semble mieux que d'utiliser email.utils pour analyser les en-têtes HTTP.
Semble maintenant (décembre 2016) rfc 822 est obsolète, le paquet de courrier électronique est une approche préférée par le document. https://docs.python.org/2/library/rfc822.html – StanleyZ
- 1. Analyser différents formats de date de feedparser en python?
- 2. Comment analyser une chaîne en JavaScript?
- 3. simple pour analyser une date en Javascript
- 4. Analyser une entrée cron en Python
- 5. Comment puis-je analyser une chaîne de temps contenant des millisecondes avec python?
- 6. Comment analyser XML dans une chaîne dans .NET?
- 7. RFC 1123 Représentation de date en Python?
- 8. Comment analyser une chaîne avec 0
- 9. Comment analyser les dates avec la chaîne -0400 timezone en Python?
- 10. Comment analyser une date au format ISO dans Flex (AS3)?
- 11. Format/analyser une chaîne Vb
- 12. Comment puis-je analyser une chaîne HTML en Java?
- 13. format de date HTTP NSDate
- 14. Comment analyser le format de date JSON en Perl?
- 15. Comment convertir une chaîne en une date dans sybase
- 16. authentification HTTP en Python
- 17. Pourquoi .NET ne peut-il pas analyser une chaîne de date avec un fuseau horaire?
- 18. Comment analyser le format de date JSON ASP.NET avec GWT
- 19. Comment analyser une URL en C?
- 20. En Python, comment transformer une chaîne en un fichier?
- 21. Analyser la chaîne à la date avec un format différent en Java
- 22. Convertir une chaîne avec date et heure à une date
- 23. Analyser une chaîne XML dans MySQL
- 24. Analyser plusieurs doubles d'une chaîne en C#
- 25. Analyser des fichiers DICOM en Python natif
- 26. Comment puis-je m'assurer que tous les clients peuvent correctement analyser une chaîne de date-heure de base de données?
- 27. Analyser une chaîne URL dans Ruby
- 28. Création d'intervalles de date en Python
- 29. Inversion de chaîne en Python
- 30. Comment voulez-vous analyser l'indentation (style python)?
Oui, le parsedate est probablement le meilleur compromis, bien que son "analyse RFC 2822 tolérante" ne soit pas 100% compatible avec RFC 2616'2 exigeant "MUST" - par exemple, échec épique sur le format RFC 850 avec des années à deux chiffres, comme «Sunday, 06-Nov-94 08:49:37 GMT», 2616 dit encore qu'un client DOIT être capable d'analyser les dates RFC 850 (soupir). –
email.Utils.parsedate semble suffisant, merci. Mais il est déroutant que cela s'appelle parfois email.utils, et parfois email.Utils. Je suppose que la version email.Utils est une ancienne variante qui a été abandonnée (?) –
'email.utils.parsedate est email.Utils.parsedate -> True' Il semble que * U * tils est un loader paresseux. – jfs