Supongo que tengo un archivo de texto que solo tiene el siguiente formato donde cada línea tiene dos números separados por un espacio:

2 4
66 99
11 67
1 3 

Este es mi código que intenté hacer:

with open('text_file.txt') as file:
    lines = []
    for i in file:
        lines.append(i)
    print(lines)

El problema con mi código es que sigue imprimiendo "\ n" con los números y no sé cómo evitarlo, necesito una forma de leer solo los dos números en la última línea y almacenar cada número en una variable, así que para el ejemplo anterior:

var1 = 1, var2 = 3.

Necesito esto para un programa de subprocesos múltiples, donde estoy probando una "condición de carrera" entre tres subprocesos donde cada subproceso lee los dos últimos números en el archivo de texto y lee la última línea de números, y luego imprime el thread_ip en el primer e incremente el segundo desde la última línea anterior e imprímalo.

No estoy pidiendo ayuda para toda la tarea, solo la parte de leer / escribir el archivo de texto es lo que parece que no puedo entender.

-3
R00 18 abr. 2020 a las 04:46

2 respuestas

La mejor respuesta
with open("example_file", "r") as fin:
   var1, var2 = [int(i) for i in fin.readline().split()]

Para almacenar los dos últimos números en la última línea:

with open("example_file", "r") as fin:
   var1, var2 = [int(i) for i in fin.readlines()[-1].split()]
0
izhang 18 abr. 2020 a las 02:29

Entonces, los dos ejemplos en la respuesta actualmente aceptada de izhang funcionan, pero tienen un costo ... En el primer ejemplo, tiene que recorrer innecesariamente todo el archivo para llegar a la última línea. Y en el segundo ejemplo, debe leer todo el archivo en la memoria. Si se trata de grandes conjuntos de datos y / o se ejecuta dentro de contenedores restringidos, esto se convertirá absolutamente en un problema.

La mejor solución es leer el archivo al revés y romper después de la primera línea de lectura. Esta no es una tarea fácil de hacer desde cero, pero afortunadamente, hay un módulo para eso.

from file_read_backwards import FileReadBackwards

with FileReadBackwards('text_file.txt') as f:
    for l in f:
        var1, var2 = l.split()
        break
print(var1, var2)
0
James Powis 18 abr. 2020 a las 02:44