Python: impide que la entrada de archivo agregue caracteres de nueva línea

Estoy utilizando una secuencia de comandos de Python para buscar y reemplazar ciertas cadenas en archivos de texto de un directorio determinado. Estoy usando el módulo fileinput para facilitar la operación de buscar y reemplazar, es decir, el archivo se lee, el texto se reemplaza y se vuelve a escribir en el mismo archivo.

El código se ve como sigue:

 import fileinput def fixFile(fileName): # Open file for in-place replace for line in fileinput.FileInput(fileName, inplace=1): line = line.replace("findStr", "replaceStr") print line # Put back line into file 

El problema es que los archivos escritos tienen:

  1. Una línea en blanco insertada después de cada línea.
  2. Ctrl-M carácter al final de cada línea.

¿Cómo evito que estos apéndices adicionales se inserten en los archivos?

Sus nuevas líneas vienen de la función de impresión.

utilizar:

 import sys sys.stdout.write ('some stuff') 

y tus saltos de línea desaparecerán

Utilizar

 print line, 

o

 file.write(line) 

para arreglar nuevas líneas adicionales.

A partir de [Ctrl] – [M] – probablemente sea causado por archivos de entrada en la encoding DOS.

En lugar de esto:

 print line # Put back line into file 

utilizar esta:

 print line, # Put back line into file 

Cambia la primera línea en tu bucle for a:

line = line.rstrip().replace("findStr", "replaceStr")

Debido a que cada statement de impresión de iteración termina con una nueva línea, está obteniendo una línea en blanco entre líneas.

Para superar este problema, puede utilizar la tira junto con la impresión.

 import fileinput def fixFile(fileName): for line in fileinput.FileInput(fileName, inplace=1): line = line.replace("findStr", "replaceStr") print line.strip() 

Ahora, puedes ver que las líneas en blanco están rayadas.

Para la actualización en Python 4.3, puedes usar:

 print(line, end = '') 

Para evitar la inserción de una nueva línea.