Lesen Sie Dateiobjekt als String in Python
Frage
Ich bin mit urllib2
auf einer Seite zu lesen. Ich brauche eine schnelle regex auf der Quelle zu tun und ein paar Variablen herausziehen, aber urllib2
präsentiert als Dateiobjekt, anstatt ein String.
Ich bin neu in Python so bin ich kämpfen, um zu sehen, wie ich ein Datei-Objekt verwenden, dies zu tun. Gibt es einen schnellen Weg, um dies in eine Zeichenfolge zu konvertieren?
Lösung
Sie können Python im interaktiven Modus, nach Lösungen zu suchen.
Wenn f
ist Ihre Aufgabe, Sie können dir(f)
geben alle Methoden und Attribute zu sehen. Es gibt eine namens read
. Geben Sie help(f.read)
und es sagt Ihnen, dass f.read()
die Art und Weise ist eine Zeichenfolge aus einem Datei-Objekt abzurufen.
Andere Tipps
Aus dem doc file.read () (Hervorhebung von mir) :
file.read ([size])
höchstens Größe Bytes aus der Datei (weniger, wenn die Lese EOF trifft vor Größe Bytes zu erhalten) lesen. Wenn die Größe Argument negativ ist oder weggelassen wird, lesen Sie alle Daten, bis EOF erreicht ist. Die Bytes werden als String-Objekt zurückgegeben. Eine leere Zeichenkette zurückgegeben wird, wenn EOF sofort angetroffen wird. (Für bestimmte Dateien, wie ttys, macht es Sinn, weiter zu lesen, nachdem ein EOF getroffen wird.) Beachten Sie, dass diese Methode in dem Bemühen, die zugrunde liegende C-Funktion fread mehr als einmal nennen kann so nah an Größe Bytes wie möglich zu erwerben. Beachten Sie auch, dass, wenn in nicht-blockierenden Modus, weniger Daten als angefordert wurde zurückgegeben werden können, auch wenn keine Größenparameter gegeben wurde.
Beachten Sie, dass eine regexp Suche auf einem großen String-Objekt nicht effizient sein kann, und berücksichtigt dabei die Suche line-by-line, mit file.next () (ein Dateiobjekt ist eine eigene Iterator).
Michael Foord, aka Voidspace hat eine hervorragende Anleitung auf urllib2, die Sie hier finden: urllib2 - The Missing Manual
Was Sie tun, sollte ziemlich einfach sein, beachten Sie diesen Beispielcode:
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()