¿Cómo eliminar la primera línea de un archivo de texto usando Python?

He estado buscando en línea, pero no he encontrado ninguna buena solución.

Aquí está mi archivo de texto:

[54, 95, 45, -97, -51, 84, 0, 32, -55, 14, 50, 54, 68, -3, 57, 88, -1] [24, 28, 38, 37, 9, 44, -14, 84, -40, -92, 86, 94, 95, -62, 12, -36, -12] [-26, -67, -89, -7, 12, -20, 76, 88, -15, 38, -89, -65, -53, -84, 31, -81, -91] [-19, -50, 16, 47, -42, -31, 75, 0, 25, -95, 75, 97, 19, 77, -2, -31, -59] [-66, -10, 35, -39, 24, 70, 74, -45, -27, 77, -44, 86, 57, 14, -91, -26, -20] [-63, 80, -31, 70, 100, 22, -30, 74, 44, -35, -25, -75, -39, -13, -93, 0, 1] [63, 13, 67, 55, -56, 45, 10, 61, -14, -55, 40, 84, -59, 7, 75, -64, -25] [7, -50, -17, -86, -43, 34, 82, 84, 49, 18, 56, -31, -19, 59, -96, 72, -40] [-73, 34, -68, 20, 30, 1, 49, 77, -94, 2, -83, 40, 2, 20, 66, 60, -36] [-80, -12, 93, 77, 73, -55, 24, 3, -60, 12, -41, -43, -49, 36, 6, -93, -24] [-41, 12, -43, 42, -70, 75, -84, -83, 30, 78, -3, 51, 69, 0, 65, 60, -15] [82, 97, -57, -96, 25, -100, 61, 13, -80, -32, 99, 60, 58, -58, -45, -58, -53] [-90, -34, 80, 95, -12, -34, 71, -83, 46, 10, -78, -40, 65, 53, -81, 40, -59] [-80, -20, -87, -2, -54, 74, -79, 22, -20, 60, -84, -12, -40, -98, -81, -5, -35] [33, 36, -46, 10, -77, 88, -99, -5, 19, -20, 89, 87, -47, 46, 10, 17, -67] [-77, 73, 20, 44, 79, -14, -8, -49, 45, -49, -91, -21, 41, -13, 74, -71, -15] [98, -99, 51, 53, 56, -78, 31, 45, 35, -36, -10, -86, 9, 94, 24, -2, -20] [-37, 46, -77, -92, 48, -34, 75, 19, -74, -13, -100, 33, -46, 19, -60, 5, 5] [-13, -30, -82, -70, 64, 87, 16, 67, -36, 22, -99, -92, 36, 8, 90, 48, -5] [46, 75, -15, 24, 24, -37, -3, -45, 32, -84, -2, -16, 43, -88, 92, 27, -10] 

Todo lo que quiero es eliminar la primera línea (lo que significa usar la segunda línea como primera línea, no llenar la primera línea con espacios en blanco).

¿Podría alguien ayudarme con eso por favor?

Asumiendo que tienes suficiente memoria para guardar todo en la memoria:

 with open('file.txt', 'r') as fin: data = fin.read().splitlines(True) with open('file.txt', 'w') as fout: fout.writelines(data[1:]) 

Podríamos ser más sofisticados, abrir el archivo, leer y luego volver al principio eliminando el segundo open , pero en realidad, esto es probablemente lo suficientemente bueno.

Aquí hay una solución de memoria eficiente (?) Que utiliza shutil:

 import shutil source_file = open('file.txt', 'r') source_file.readline() # this will truncate the file, so need to use a different file name: target_file = open('file.txt.new', 'w') shutil.copyfileobj(source_file, target_file) 

Bash será más rápido para ese propósito. Puedes usar estos en tu script de python:

 subprocess.Popen.communicate() 

Escribí una función para ejecutar un subproceso cmd para shell:

 def popen_method(call): subprocess_call = Popen([call], shell=True, stdout=PIPE, stderr=PIPE) out, err = subprocess_call.communicate() if err: raise yourError( '\n============= WARNING/ERROR ===============\n{}\n===========================================\n'.format( err.rstrip())) return out 

Lo llamas así:

 testing = "sed -i /var/output/ip_list.csv -e '1 s/^.*$/host_id,ip,last_updated/g'" popen_method(testing) 

o usar:

 from sh import sed 

a continuación, ejecute el comando sed:

 sed -i /var/output/ip_list.csv -e '1 s/^.*$/host_id,ip,last_updated/g' 

Esto reemplazará todo lo que tenía en la primera línea con host_id,ip,last_updated .