Python - De str a list

 
Vista:
Imágen de perfil de Gustavo Girardelli
Val: 64
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por Gustavo Girardelli (24 intervenciones) el 16/03/2021 19:36:07
Hola:

Parto de un archivo de texto plano llamado uno.txt

1
[['1683027', 'F', '37', 'Argentina', 'Buenos Aires', 'Merlo', 'Buenos Aires', '12/12/2020', '4/8/2020', '32', '', 'NO', '', 'NO', '', 'NO', '6', 'Sospechoso', '6', '', '539'], ['1248414', 'M', '31', 'SIN ESPECIFICAR', 'CABA', 'SIN ESPECIFICAR', 'CABA', '10/12/2020', '3/7/2020', '27', '', 'NO', '', 'NO', '', 'NO', '2', 'Confirmado', '2', '12/12/2020', '0']]

Que contiene una lista de listas (una matriz), con el adecuado formato en Python.
Luego, lo abro, línea a línea, y lo asigno a una variable str

1
2
3
4
5
x = ''
t = open('uno.txt','r')
for i in t:
    x += i
print(x)

Esto me muestra:

1
[['1683027', 'F', '37', 'Argentina', 'Buenos Aires', 'Merlo', 'Buenos Aires', '12/12/2020', '4/8/2020', '32', '', 'NO', '', 'NO', '', 'NO', '6', 'Sospechoso', '6', '', '539'], ['1248414', 'M', '31', 'SIN ESPECIFICAR', 'CABA', 'SIN ESPECIFICAR', 'CABA', '10/12/2020', '3/7/2020', '27', '', 'NO', '', 'NO', '', 'NO', '2', 'Confirmado', '2', '12/12/2020', '0']]

O sea la matriz. Pero sigue siendo de tipo str, cuando lo convierto al tipo list:

1
2
3
4
5
6
x = ''
t = open('uno.txt','r')
for i in t:
    x += i
x = list(x)
print(x)

Lo hace una lista de una sola dimensión, el la que cada caracter es un elemento del vector (incluidas hasta las comillas).

1
['[', '[', "'", '1', '6', '8', '3', '0', '2', '7', "'", ',', ' ', "'", 'F', "'", ',', ' ', "'", '3', '7', "'", ',', ' ', "'", 'A', 'r', 'g', 'e', 'n', 't', 'i', 'n', 'a', "'", ',', ' ', "'", 'B', 'u', 'e', 'n', 'o', 's', ' ', 'A', 'i', 'r', 'e', 's', "'", ',', ' ', "'", 'M', 'e', 'r', 'l', 'o', "'", ',', ' ', "'", 'B', 'u', 'e', 'n', 'o', 's', ' ', 'A', 'i', 'r', 'e', 's', "'", ',', ' ', "'", '1', '2', '/', '1', '2', '/', '2', '0', '2', '0', "'", ',', ' ', "'", '4', '/', '8', '/', '2', '0', '2', '0', "'", ',', ' ', "'", '3', '2', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", '6', "'", ',', ' ', "'", 'S', 'o', 's', 'p', 'e', 'c', 'h', 'o', 's', 'o', "'", ',', ' ', "'", '6', "'", ',', ' ', "'", "'", ',', ' ', "'", '5', '3', '9', "'", ']', ',', ' ', '[', "'", '1', '2', '4', '8', '4', '1', '4', "'", ',', ' ', "'", 'M', "'", ',', ' ', "'", '3', '1', "'", ',', ' ', "'", 'S', 'I', 'N', ' ', 'E', 'S', 'P', 'E', 'C', 'I', 'F', 'I', 'C', 'A', 'R', "'", ',', ' ', "'", 'C', 'A', 'B', 'A', "'", ',', ' ', "'", 'S', 'I', 'N', ' ', 'E', 'S', 'P', 'E', 'C', 'I', 'F', 'I', 'C', 'A', 'R', "'", ',', ' ', "'", 'C', 'A', 'B', 'A', "'", ',', ' ', "'", '1', '0', '/', '1', '2', '/', '2', '0', '2', '0', "'", ',', ' ', "'", '3', '/', '7', '/', '2', '0', '2', '0', "'", ',', ' ', "'", '2', '7', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", "'", ',', ' ', "'", 'N', 'O', "'", ',', ' ', "'", '2', "'", ',', ' ', "'", 'C', 'o', 'n', 'f', 'i', 'r', 'm', 'a', 'd', 'o', "'", ',', ' ', "'", '2', "'", ',', ' ', "'", '1', '2', '/', '1', '2', '/', '2', '0', '2', '0', "'", ',', ' ', "'", '0', "'", ']', ']']

En el que solo se reconocen el primer y el último corchetes.
Mi pregunta es:

¿Existe la manera de de convertir un texto con formato de lista en una lista?

Desde ya, muchas gracias por el tiempo y la paciencia y saludos mil.

.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por tincopasan (1082 intervenciones) el 17/03/2021 06:07:31
varias cosas:
1) las matrices tienen solo números, eso es una lista con sublistas.
2)el contenido del archivo tiene una representación caótica.
3)hay inclusive valores nulos.
4)así y todo por lo menos tienen la misma cantidad de elementos
5) desconozco si existe algo simple para ese desorden
6) en este caso lo solucionaría así:
1
2
3
4
5
6
7
8
9
10
with open('uno.txt') as archivo:
    cadena =archivo.read().replace('],',';')
 
matriz=[]
matriz.append(cadena[2:cadena.find(';')].replace("'","").split(','))
matriz.append(cadena[cadena.find(';') + 3:-2].replace("'","").split(','))
print(matriz)

puse el nombre matriz, pero claramente no lo es, es solo una lista.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gustavo
Val: 64
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por Gustavo (24 intervenciones) el 17/03/2021 13:16:42
Tengo que analizarlo detenidamente para entenderlo, pero, en principio funciona.

Muchas gracias Tincopasan!

.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.475
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por joel (901 intervenciones) el 17/03/2021 07:39:53
Hola Gustavo, para ello, puedes utilizar literal_eval()... algo así:

1
2
3
4
5
6
7
import ast
 
str="[['1683027', 'F', '37', 'Argentina', 'Buenos Aires', 'Merlo', 'Buenos Aires', '12/12/2020', '4/8/2020', '32', '', 'NO', '', 'NO', '', 'NO', '6', 'Sospechoso', '6', '', '539'], ['1248414', 'M', '31', 'SIN ESPECIFICAR', 'CABA', 'SIN ESPECIFICAR', 'CABA', '10/12/2020', '3/7/2020', '27', '', 'NO', '', 'NO', '', 'NO', '2', 'Confirmado', '2', '12/12/2020', '0']]"
print (type(str)) // <class 'str'>
 
lista=ast.literal_eval(str)
print (type(lista)) // <class 'list'>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gustavo
Val: 64
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por Gustavo (24 intervenciones) el 17/03/2021 13:22:59
En verdad, no entiendo bien lo que me dices.
Tengo que analizarlo en profundidad.

Muchas gracias Joel!

.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

De str a list

Publicado por tincopasan (1082 intervenciones) el 17/03/2021 18:22:01
se puede simplemente con :
1
2
3
str="[['1683027', 'F', '37', 'Argentina', 'Buenos Aires', 'Merlo', 'Buenos Aires', '12/12/2020', '4/8/2020', '32', '', 'NO', '', 'NO', '', 'NO', '6', 'Sospechoso', '6', '', '539'], ['1248414', 'M', '31', 'SIN ESPECIFICAR', 'CABA', 'SIN ESPECIFICAR', 'CABA', '10/12/2020', '3/7/2020', '27', '', 'NO', '', 'NO', '', 'NO', '2', 'Confirmado', '2', '12/12/2020', '0']]"
 
lista=eval(str)
sin necesidad de importar ast, pero cuidado, con las funciones que usan eval() se presta a la inyección de código malicioso, por eso mayormente no se usa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar