2009-03-18 15 views
18

Estoy usando 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 búsqueda y reemplazo, es decir, el archivo se lee, se reemplaza el texto y se vuelve a escribir en el mismo archivo.Python: Impedir que la entrada de archivos agregue caracteres de nueva línea

El código es el siguiente:

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 después de insertar cada línea.
  2. Personaje Ctrl-M al final de cada línea.

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

Respuesta

31

Sus saltos de línea están viniendo de la función de impresión

uso:

import sys 

sys.stdout.write ('some stuff') 

y sus saltos de línea se irán

+1

¡Muchas gracias! Esto corrigió tanto las líneas adicionales como los caracteres Ctrl-M. He elegido tu respuesta como la solución a este problema. Siga adelante y agregue información adicional a su respuesta si lo desea. –

+1

¿Podría agregar un pequeño detalle? :) – Pitto

11

Uso

print line, 

o

file.write(line) 

para fijar nuevas líneas adicionales.

A partir de [Ctrl] - [M] - esto es probablemente causado por los archivos de entrada en la codificación de DOS.

+0

Gracias. Su solución elimina las líneas en blanco, pero aún tiene los caracteres Ctrl-M.Otra persona ya ha sugerido una respuesta que resuelve ambos para mí. –

7

lugar de esto:

print line # Put back line into file 

uso esto:

print line, # Put back line into file 
6

cambiar la primera línea en el bucle for para:

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

+0

Por favor explique el voto abajo. Este método aborda el problema de nueva línea (aunque no pude reproducir el problema Ctrl-M, por lo que no puedo hablar con él). – kmote

+1

El problema con esta respuesta es que es esencialmente un "truco", eliminando la nueva línea original en lugar de simplemente evitar agregar una adicional en primer lugar (¡cubierta por otras respuestas un año antes de publicar la suya!). Esa es probablemente la razón por la que tienes votos bajos. –

0

Debido a cada declaración iteración de impresión termina con salto de línea, que está recibiendo línea en blanco entre las líneas.

Para solucionar 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, puede ver que las líneas en blanco están rayadas.

+0

Esto también eliminará la sangría, sin embargo, que puede no ser deseada. En su lugar, use rstrip() :) – mjd2

2

Para la actualización en Python 4.3, sólo puede utilizar:

print(line, end = '') 

para evitar la introducción de una nueva línea.

+6

Python ** 4.3 ** ?? :) – errata

Cuestiones relacionadas