31 votes

Lire l'objet fichier sous forme de chaîne en python

J'utilise urllib2 pour lire une page. J'ai besoin de faire une regex rapide sur la source et de retirer quelques variables mais urllib2 présente comme un objet fichier plutôt qu'une chaîne.

Je suis nouveau sur python, j'ai donc du mal à voir comment j'utilise un objet fichier pour ce faire. Existe-t-il un moyen rapide de convertir cela en chaîne?

77voto

stesch Points 5774

Vous pouvez utiliser Python en mode interactif pour rechercher des solutions.

si f est votre objet, vous pouvez entrer dir(f) pour voir toutes les méthodes et tous les attributs. Il y en a un appelé read . Entrez help(f.read) et il vous indique que f.read() est le moyen de récupérer une chaîne à partir d'un objet fichier.

14voto

gimel Points 30150

À partir de la doc fichier.lire() (je souligne):

fichier.lire([taille])

Lire au plus la taille octets du fichier (moins si la lecture hits EOF avant d'obtenir la taille en octets). Si la taille de l'argument est négatif ou omis, la lecture de toutes les données jusqu'à ce que EOF est atteint. Les octets sont retournés comme un objet de type string. Une chaîne vide est renvoyée lorsque EOF est rencontré immédiatement. (Pour certains fichiers, comme l'ats, il est logique de continuer la lecture après une EOF est atteint.) Notez que cette méthode peut appeler le sous-jacent C de la fonction fread plus d'une fois, dans un effort pour acquérir près de la taille octets que possible. Notez également qu'en cas de non-blocage de mode, moins de données que ce qui était demandé peut être renvoyé, même si aucun paramètre de taille a été donné.

Sachez qu'une regexp recherche sur une chaîne de grande taille de l'objet peut ne pas être efficace, et envisager de faire de la recherche, ligne par ligne, à l'aide de fichier.next() (un fichier objet est sa propre itérateur).

5voto

t3rse Points 5983

Michael Foord, alias Voidspace a un excellent tutoriel sur urllib2 que vous pouvez trouver ici: urllib2 - The Missing Manual

Ce que vous faites devrait être assez simple, observez cet exemple de code:

 import urllib2
import re
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml")
html = response.read()
pattern = '(V.+space)'
wordPattern = re.compile(pattern, re.IGNORECASE)
results = wordPattern.search(html)
print results.groups()
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X