2012-06-25 29 views
14
text_file = open("new.txt", "r") 

lines = text_file.readlines() 

for line in lines: 
     var1, var2 = line.split(","); 
     myfile = open('xyz.txt', 'w') 
     myfile.writelines(var1) 
     myfile.close() 
text_file.close() 

tengo 10 líneas de texto en nuevo.txt como Adam: 8154 George: 5234 y así sucesivamente. Ahora quiero un archivo de texto que contenga solo los nombres. xyz.txt debe contener a Adam George, etc. Ahora el código anterior me deja con el décimo nombre solamente.Escribir en un archivo en un bucle for

Cómo tener todos los 10 nombres en un solo archivo de texto.

Respuesta

21

Eso se debe a que se está abriendo, escribir y cerrar el archivo 10 veces dentro de su ciclo for

myfile = open('xyz.txt', 'w') 
myfile.writelines(var1) 
myfile.close() 

Debe abrir y cerrar el archivo fuera de bucle.

myfile = open('xyz.txt', 'w') 
for line in lines: 
    var1, var2 = line.split(","); 
    myfile.write("%s\n" % var1) 

myfile.close() 
text_file.close() 

, también se observa que el uso escribir y no writelines.

writelines escribe una lista de líneas en su archivo.

También debe ver las respuestas publicadas por la gente aquí que usa la declaración with. Esa es la forma elegante de hacer operaciones de lectura/escritura de archivos en Python

+1

O usar 'with' antes del bucle. –

+0

no hizo ningún cambio en el resultado – h4r5h4

+0

sí, quería hacerle entender el problema primero. Gracias – pyfunc

11

El principal problema era que estaba abriendo/cerrando archivos repetidamente dentro de su ciclo.

probar este enfoque:

with open('new.txt') as text_file, open('xyz.txt', 'w') as myfile: 
    for line in text_file: 
     var1, var2 = line.split(","); 
     myfile.write(var1+'\n') 

Abrimos ambos archivos a la vez y porque estamos utilizando with Serán automáticamente cerrado cuando hayamos terminado (o se produce una excepción). Anteriormente, su archivo de salida se abría repetidamente dentro de su ciclo.

También estamos procesando el archivo línea por línea, en lugar de leer todos en la memoria a la vez (lo que puede ser un problema cuando se trata de archivos realmente grandes).

Tenga en cuenta que write() no añade una nueva línea ('\n') por lo que tendrá que hacer eso mismo, si lo necesita (Substituí su writelines() con write() como usted está escribiendo un solo elemento, no una lista de artículos) .

Al abrir un archivo para r leer, el 'r' es opcional ya que es el modo predeterminado.

+0

Muchas gracias – h4r5h4

+0

@Levon: +1 Gracias por esa corrección – pyfunc

5

Es preferible utilizar gestores de contexto para cerrar los archivos de forma automática

with open("new.txt", "r"), open('xyz.txt', 'w') as textfile, myfile: 
for line in textfile: 
    var1, var2 = line.split(","); 
    myfile.writelines(var1) 
+0

Sabía que se podían abrir varios archivos con 'with' (hago lo mismo arriba) pero no sabía este formato con las variables de archivo al final .. aprendí algo nuevo, limpio. – Levon

Cuestiones relacionadas