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.

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)

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con el código anterior.

    En primer lugar, se llama al método truncate() en el objeto de archivo distance_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 en distance_data_to_add. Esto se puede solucionar moviendo la inicialización de distance_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étodo write() 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 atributos latitude y longitude 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 a write() solo si element no es el último elemento en la lista distance_data_to_add.

    Aquí hay una versión modificada del código con estos problemas resueltos:

    import geopy.distance
    
    with open("Distancia desde el inicio.txt", "w") as distance_data:
        for i in range(360):
            bearing = i
            lat = 51.8983
            long = 177.1822667
            distance_data_to_add = []
            for j in range(10):
                distance = j
                new_lat_long = geopy.distance.distance(miles=distance).destination(
                    (lat, long), bearing=bearing
                )
                distance_data_to_add.append(new_lat_long)
            for k, element in enumerate(distance_data_to_add):
                # Solo escribir un salto de línea antes de element si no es el primer elemento
                if k != 0:
                    distance_data.write("\n")
                # Extraer la latitud y longitud del objeto de coordenada y formatearlas como cadenas
                lat_str = f"{element.latitude}{'N' if element.latitude >= 0 else 'S'}"
                lon_str = f"{element.longitude}{'E' if element.longitude >= 0 else 'W'}"
                # Escribir las cadenas formateadas en el archivo
                distance_data.write(f"{lat_str}, {lon_str}")
            # Imprimir la lista de objetos de coordenada
            print(distance_data_to_add)
    

    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.

Comments are closed.