Puede ser interesante saber que hay una diferencia sutil, pero importante entre:
file = open(filename)
lines = file.readlines()
for line in lines:
do something
y
file = open(filename)
for line in file:
do something
La primera solución (con readlines
) se carga todo el contenido de la archivo en la memoria y devolver una lista de python (de cadenas). Por otro lado, la segunda solución hace uso de algo que se llama iterator
. De hecho, moverá el puntero al archivo según sea necesario y devolverá una cadena. Esto tiene un beneficio importante: el archivo no se carga en la memoria. Para archivos pequeños, ambos enfoques están bien.Pero siempre que solo trabaje con el archivo línea por línea, sugiero usar el comportamiento del iterador directamente.
Así que mi solución sería:
infile = open(filename)
outfile = open("%s.new" % filename, "w")
for line in infile:
outfile.write(line[2:])
infile.close()
outfile.close()
Ahora que lo pienso de ella: Si se trata de un archivo no ASCII (por ejemplo latino-1 codificado), considere el uso codecs.open. De lo contrario, puede tener una sorpresa desagradable, ya que accidentalmente puede cortar un carácter multibyte por la mitad;)
Sin embargo, si no necesita Python, y lo único que tiene que hacer es recortar los dos primeros caracteres del archivo , entonces la manera más eficiente de hacerlo es la sugerencia de kch y utilizar cut
:
cat filename | cut -d2- > newfile
para este tipo de operaciones con archivos rápida y sucia-siempre tengo instalado en mi cygwin Boxen no Linux. Pero creo que hay un conjunto de binarios de Windows para estas herramientas que funcionaría más rápido que en cygwin iirc.
Debe leer el tutorial (http://docs.python.org/tutorial/). Lo que estabas buscando está justo en la introducción (mira "cuerdas"). – hop