¿Cómo puedo leer en mi archivo línea por línea con cada línea como una lista de flotadores?

Tengo un archivo donde cada línea tiene un par de coordenadas así:

[-74.0104294, 40.6996416] 

El código que estoy usando para leerlos es:

 with open('Manhattan_Coords.txt', 'r') as f: mVerts = f.read().splitlines() 

Esto lee en todas las 78 líneas en una lista, pero las lee como cadenas, así que cuando las imprimo aparecen como:

 ['[(-74.0104294, 40.6996416]', ... , '[-74.0104294, 40.6996416]'] 

(Imagina el … como 76 coordenadas más como el primero y el último)

¿Cómo puedo leer en cada uno de estos pares de coordenadas como una lista para quedarme con una lista de 78 sublistas con 2 flotantes dentro de cada sublista?

Para cada línea, necesita:

  1. Leerlo
    … usando un bucle for para iterar sobre el archivo
  2. Franjas en blanco incluyendo nuevas líneas
    … usando str.strip()
  3. Pierde los primeros y últimos caracteres (paréntesis)
    … usando el corte de cadena : [1:-1]
  4. Dividir en la subcadena ', '
    … usando str.split() y una lista de comprensión .
  5. Convertir las cadenas resultantes en flotadores
    … utilizando float()
  6. Agrega cada par de flotadores a una lista
    … utilizando list.append()

Eso se parece a esto:

 m_verts = [] with open('Manhattan_Coords.txt') as f: for line in f: pair = [float(s) for s in line.strip()[1:-1].split(", ")] m_verts.append(pair) 

Después de lo cual, m_verts ve así:

 >>> m_verts [[-74.0104294, 40.6996416], ... ] 

En general, es mejor iterar sobre las líneas de un archivo que leerlas todas en una lista a la vez con métodos como splitlines() … es más legible, y con archivos grandes mucho más eficientes.

Además, tenga en cuenta que he usado el estilo más pythonic under_score para nombrar m_verts , en lugar del estilo camelCase , y que no es necesario especificar 'r' al abrir un archivo para leer.

incluso mejor que la solución @ZeroPiraeus use ast.literal_eval que puede evaluar cualquier literal de python (aquí hay una lista de compuestos literales de flotante literal)

 import ast m_verts = [] with open('Manhattan_Coords.txt') as f: for line in f: pair = ast.literal_eval(line) m_verts.append(pair) 

Pero para la construcción de la lista aún mejor es la comprensión de la lista.

 import ast with open('Manhattan_Coords.txt') as f: m_verts = [ast.literal_eval(line) for line in f]