2008-12-06 15 views
28

Estoy usando urllib2 para leer en una página. Necesito hacer una expresión regular rápida en el origen y extraer algunas variables, pero urllib2 se presenta como un objeto de archivo en lugar de una cadena.Leer el objeto del archivo como una cadena en python

Soy nuevo en python, así que estoy luchando para ver cómo uso un objeto de archivo para hacer esto. ¿Hay una forma rápida de convertir esto en una cadena?

Respuesta

74

Puede usar Python en modo interactivo para buscar soluciones.

si f es su objeto, puede ingresar dir(f) para ver todos los métodos y atributos. Hay uno llamado read. Ingrese help(f.read) y le dice que f.read() es la forma de recuperar una cadena de un objeto de archivo.

+3

Gracias por la respuesta en profundidad (especialmente sobre encontrar atributos/métodos de objetos). .read() funcionó perfectamente. – Oli

+5

Excelente respuesta de la escuela 'enseñanza a los peces'. ¡Te daría +2 si pudiera! –

+5

A veces lo único que queremos es utilizar stackoverflow como libro de consulta rápida. La respuesta de gimel es mucho más útil para los googlers. –

13

Desde el doc file.read() (el subrayado es mío):

file.read ([tamaño])

Lee como mucho size bytes del archivo (menos si la lectura golpea EOF antes de obtener size bytes) Si el argumento de tamaño es negativo u omitido, lea todos los datos hasta que se alcance EOF. Los bytes se devuelven como un objeto de cadena. Se devuelve una cadena vacía cuando se encuentra EOF inmediatamente. (Para ciertos archivos, como ttys, tiene sentido continuar leyendo después de que se produce un EOF). Tenga en cuenta que este método puede llamar a la función C subyacente más de una vez en un esfuerzo por adquirir bytes lo más cercanos posible al tamaño. También tenga en cuenta que cuando se encuentre en modo sin bloqueo, se podrán devolver menos datos de los solicitados, incluso si no se proporcionó ningún parámetro de tamaño.

Tenga en cuenta que una búsqueda de expresiones regulares en un objeto de cadena grande puede no ser eficiente, y la posibilidad de adherirse a la línea por línea de búsqueda, utilizando file.next() (un objeto de archivo es su propio iterador).

5

Michael Foord, también conocido como Voidspace tiene un excelente tutorial sobre urllib2 donde puede encontrar aquí: urllib2 - The Missing Manual

Lo que está haciendo debe ser bastante sencillo, observar este código de ejemplo:

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() 
Cuestiones relacionadas