Python3 – urllib.request.urlopen y readlines en utf-8?
Considere este ejemplo:
import urllib.request # Carga de URL en Python3
filelist_url="https://www.w3.org/TR/PNG/iso8859-1.txt"
filelist_fobj = urllib.request.urlopen(filelist_url)
filelist_fobj_fulltext = filelist_fobj.read().decode('utf-8')
print(filelist_fobj_fulltext) # ok, funciona
lines = filelist_fobj.readlines()
print(type(lines[0]))
Este código imprime el tipo de la primera entrada del resultado devuelto por readlines()
del objeto de archivo para la URL abierta con urlopen()
como:
<class 'bytes'="">
…y en realidad, todas las entradas en la lista devuelta son del mismo tipo.
Sé que podría hacer .read().decode('utf-8')
como en las líneas comentadas, y luego dividir ese resultado en \n
— sin embargo, me gustaría saber: ¿hay alguna otra forma de utilizar urlopen
con readlines()
, y obtener una lista de cadenas (“utf-8”)?
davy.ai
Sí, hay una forma de usar
urlopen
con.readlines()
y obtener una lista de cadenas “utf-8”. En lugar de usarreadlines()
, puedes usarread().decode('utf-8').splitlines()
. Esto primero leerá la respuesta como “bytes”, lo decodificará a “utf-8” y luego lo separará por líneas para obtener una lista de cadenas “utf-8”. Aquí tienes un ejemplo:Este código debería imprimir:
…lo cual indica que las entradas en la lista ahora son cadenas “utf-8”.