es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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”)?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de usar urlopen con .readlines() y obtener una lista de cadenas “utf-8”. En lugar de usar readlines(), puedes usar read().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:

    import urllib.request # Carga de URL en Python3
    
    filelist_url = "https://www.w3.org/TR/PNG/iso_8859-1.txt"
    filelist_fobj = urllib.request.urlopen(filelist_url)
    lines = filelist_fobj.read().decode('utf-8').splitlines()
    
    print(type(lines[0]))
    

    Este código debería imprimir:

    <class 'str'="">
    

    …lo cual indica que las entradas en la lista ahora son cadenas “utf-8”.

Comments are closed.