El error _io.TextIOWrapper object has no attribute split, que nos puede aparecer en Python, en alguna ocasión, suele tener una explicación sencilla.
Tal y como nos dice el propio error, el objeto no posee un atributo o método split()
.
Según mi experiencia, lo que sucede es que este error común cuando comenzamos , se debe a que estamos confundiendo un tipo de objeto (file)
, con un tipo de dato(string)
.
‘El objeto io.TextIOWrapper
‘, es el que se obtiene cuando abrimos un documento con open() y este no ha sido leído, ni se ha escrito sobre el.
El atributo, función o método split() corresponde a objetos de tipo string o cadenas, mientras que los objetos de tipo file, aun cuando pueden tener un contenido de tipo texto, no son compatibles con split().
Por tanto, es a los string a los que podemos aplicarle split()
, para separar según el elemento que digamos, sus partes.
a= 'serio.jose.alberto.123.124.126' b = a.split('.') print (b)
1
a= 'serio.jose.alberto.123.124.126'
2
b = a.split('.')
3
print (b)
output:
['serio', 'jose', 'alberto', '123', '124', '126']
Hay muchas formas de dividir un objeto tipo file en partes o fragmentos.
Aquí, veremos algunos ejemplos:
Dividiendo un objeto tipo file en líneas
with open('mi_file.txt') as file: #el metodo open ()pertenece al objeto
# file, por tanto open
# siempre retorna un objeto tipo file
mi_file = [line.rstrip('\n') for line in file]
Dividiendo segun otros elementos
Una solución que te permitirá, obtener tu objetivo, por otra vía, es convertir tu objeto file a un objeto string mediante el método read()
, y luego aplicarle a este el método split()
Veámoslo:
with open('/Volumes/Searc/testing/texto.txt','r') as file: #abrimos el objeto file
mi_file=file.read() #lo leemos
mi_div = mi_file.split(',') # le aplicamos el método split()
print(mi_div)
La salida seria una lista con el texto dividido según comas.
output:
['Lorem ipsum dolor sit amet', ' consectetur adipiscing elit.\nCurabitur aliquet sem eget magna fermentum', ' non aliquam tortor volutpat.\nNunc pulvinar', ' dolor nec porttitor iaculis', ' diam elit finibus purus', ' et finibus ligula diam luctus erat.\nMorbi placerat sodales ligula. Aliquam iaculis congue libero', ' vel consequat tellus ullamcorper nec.\nPhasellus venenatis tempus pulvinar. Nunc nec fringilla elit. In dignissim nulla eget ligula facilisis cursus.\nVestibulum malesuada nunc sit amet turpis cursus rhoncus sollicitudin quis nisi. Sed pharetra augue nec hendrerit imperdiet.\nVestibulum volutpat dignissim nisl', ' a lobortis lacus hendrerit ut. Suspendisse ac orci felis.\nEtiam arcu tortor', ' lobortis eget commodo in', ' luctus vitae quam.\nDuis convallis', ' metus et luctus convallis', ' metus elit accumsan arcu', ' ac pretium magna justo nec ligula.\nNullam lectus arcu', ' elementum in consectetur id', ' tincidunt id justo.\nCurabitur urna nisl', ' faucibus eget ullamcorper tincidunt', ' tincidunt non ligula.\nCras mi quam', ' venenatis non suscipit vitae', ' fringilla ut tortor. Sed pellentesque turpis quis tincidunt finibus.\nNam eget volutpat metus. Duis viverra', ' mi eget egestas porta', ' purus ligula placerat nunc', ' eu finibus arcu mi eu magna.\nDonec porta lacus ut erat suscipit', ' at tincidunt mi eleifend. Quisque auctor condimentum purus', ' sit amet tempor turpis luctus ac.\nCurabitur placerat tincidunt eros ac lacinia. Curabitur malesuada hendrerit pharetra. Quisque elit ante', ' egestas quis porttitor quis', ' lacinia eu lectus. Donec dictum dictum mattis.']
Python nos permite leer el contenido de un archivo, con read.
El método read, acepta un parámetro o argumento opcional size, para leer l cierta cantidad de datos y devolverlos como una cadena (en modo de texto) o un objeto de bytes (en modo binario).
Si omites el tamaño o es negativo, Python leerá y devolverá todo el contenido del archivo; esto con archivos muy grandes puede afectar la memoria.
Read devuelve una cadena vacia si lleg al final del archivo y no puede leerlo.
Puedes ver lo métodos del objeto file aquí
Y hasta aquí, espero sinceramente que esto sirva de ayuda a alguien.
El viento hincha la vela, pero la deshilacha y hay tantas velas rotas en el fondo del mar.
J. A. Buesa