Se está agregando información distinta a un archivo de la que se está imprimiendo en la consola.
He estado escribiendo un programa para obtener todas las coordenadas dentro de un radio de diez millas de cualquier punto dado, pero cuando se imprime los datos de distancia, la salida es diferente a los datos del archivo. Además, crea una línea en blanco al final del archivo. ¿Qué debo hacer?
import geopy.distance
distance_data = open("Distancia desde inicio.txt", "w")
distance_data.truncate()
distance_data_to_add = []
for i in range (360):
bearing = i
lat = 51.8983
long = 177.1822667
for i in range (10):
distance = i
new_lat_long =
geopy.distance.distance(miles=distance).destination((lat, long), bearing=bearing)
distance_data_to_add.append(new_lat_long)
for element in distance_data_to_add:
distance_data.write(str(element) + "\n")
print(distance_data_to_add)
Un ejemplo de línea del archivo es:
51 56m 30.0669s N, 177 10m 51.749s E
Un ejemplo de la información impresa en la consola es:
Point(51.94168524994642, 177.1810413957121, 0.0)
davy.ai
Hay algunos problemas con el código anterior.
En primer lugar, se llama al método
truncate()
en el objeto de archivodistance_data
, lo cual borra todos los datos en el archivo. Esto no es necesario ya que el archivo se abre en modo escritura ("w"
), lo cual debería sobrescribir los datos existentes en el archivo.En segundo lugar, la lista
distance_data_to_add
no se limpia después de cada iteración del bucle externo, lo cual significa que las coordenadas de todas las iteraciones anteriores se incluyen endistance_data_to_add
. Esto se puede solucionar moviendo la inicialización dedistance_data_to_add
dentro del bucle externo.En tercer lugar, la instrucción
print(distance_data_to_add)
imprime la lista de coordenadas, pero se utiliza el métodowrite()
para escribir la representación__str__()
de cada objeto de coordenada en el archivo. Por eso, los datos en el archivo se ven diferentes a los datos impresos en la consola. Para escribir los mismos datos en el archivo que se imprimen en la consola, se deben extraer los atributoslatitude
ylongitude
de cada objeto de coordenada y formatearlos como cadenas antes de escribirlos en el archivo.Finalmente, la línea en blanco al final del archivo probablemente se debe a la última llamada a
write()
que agrega un carácter de nueva línea después del último objeto de coordenada. Esto se puede solucionar eliminando el carácter de nueva línea de cada objeto de coordenada antes de escribir, o llamando awrite()
solo sielement
no es el último elemento en la listadistance_data_to_add
.Aquí hay una versión modificada del código con estos problemas resueltos:
Con estas modificaciones, la salida en el archivo y en la consola deben coincidir, y no debe haber una línea en blanco al final del archivo.