txt texto leer importar editar como columnas archivos archivo python text-files

leer - Copiando de un archivo de texto a otro usando Python



editar archivo de texto python (7)

Me gustaría copiar ciertas líneas de texto de un archivo de texto a otro. En mi script actual, cuando busco una cadena, copia todo después, ¿cómo puedo copiar solo una parte del texto? Por ejemplo, ¿solo copiar líneas cuando tiene "tests / file / myword"?

código actual:

#!/usr/bin/env python f = open(''list1.txt'') f1 = open(''output.txt'', ''a'') doIHaveToCopyTheLine=False for line in f.readlines(): if ''tests/file/myword'' in line: doIHaveToCopyTheLine=True if doIHaveToCopyTheLine: f1.write(line) f1.close() f.close()


El oneliner:

open("out1.txt", "w").writelines([l for l in open("in.txt").readlines() if "tests/file/myword" in l])

Recomendado with :

with open("in.txt") as f: lines = f.readlines() lines = [l for l in lines if "ROW" in l] with open("out.txt", "w") as f1: f1.writelines(lines)

Usando menos memoria:

with open("in.txt") as f: with open("out.txt", "w") as f1: for line in f: if "ROW" in line: f1.write(line)


Sólo una forma ligeramente limpia de hacer esto. Esto no es más o menos eficaz que la respuesta de ATOzTOA, pero no hay razón para hacer dos por separado con las declaraciones.

with open(path_1, ''a'') as file_1, open(path_2, ''r'') as file_2: for line in file_2: if ''tests/file/myword'' in line: file_1.write(line)


Seguro y ahorro de memoria:

with open("out1.txt", "w") as fw, open("in.txt","r") as fr: fw.writelines(l for l in fr if "tests/file/myword" in l)

No crea listas temporales (lo que harían readline y [] , que no es un motor de arranque si el archivo es enorme), todo se hace con las integraciones del generador, y el uso with bloques garantiza que los archivos se cierran al salir.


con abierto ("list1.txt") como f: doIHaveToCopyTheLine = False '''' ''archivo de salida abierto en modo de escritura'' '''' con abierto ("output.txt", ''w'') como f1: iterar línea por línea '''' ''para la línea en f: if'' tests / file / myword ''en la línea: doIHaveToCopyTheLine = verdadero elif doIHaveToCopyTheLine: f1.write (línea)

f1.close () f.close ()


readlines () lee todo el archivo de entrada en una lista y no tiene un buen desempeño. Solo iterar a través de las líneas en el archivo. Utilicé ''with'' en output.txt para que se cierre automáticamente cuando termine. No es necesario en ''list1.txt'' porque se cerrará cuando finalice el bucle for.

#!/usr/bin/env python with open(''output.txt'', ''a'') as f1: for line in open(''list1.txt''): if ''tests/file/myword'' in line: f1.write(line)


f = open(''list1.txt'') f1 = open(''output.txt'', ''a'') # doIHaveToCopyTheLine=False for line in f.readlines(): if ''tests/file/myword'' in line: f1.write(line) f1.close() f.close()

Ahora su código funcionará. Prueba este.


f=open(''list1.txt'') f1=open(''output.txt'',''a'') for x in f.readlines(): f1.write(x) f.close() f1.close()

Esto funcionará al 100%, prueba esto una vez.