2009-03-18 10 views
18

Sto utilizzando uno script Python su trovare e sostituire determinate stringhe nei file di testo di una determinata directory. Sto usando il modulo fileinput per facilitare l'operazione di ricerca e sostituzione, ovvero il file viene letto, sostituito e riscritto nello stesso file.Python: impedire l'ingresso di file dall'aggiunta di caratteri di nuova riga

Il codice è il seguente:

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 

Il problema è che i file scritti hanno:

  1. una riga vuota inserita dopo ogni linea.
  2. carattere Ctrl-M alla fine di ogni riga .

Come impedire che tali appendici supplementari vengano inserite nei file?

risposta

31

I suoi ritorni a capo sono provenienti dalla funzione di stampa

uso:

import sys 

sys.stdout.write ('some stuff') 

e le tue interruzioni di riga andrà via

+1

Grazie mille! Questo ha risolto sia le linee extra che i caratteri Ctrl-M. Ho scelto la tua risposta come soluzione a questo problema. Vai avanti e aggiungi qualche informazione in più alla tua risposta, se lo desideri. –

+1

Puoi aggiungere qualche piccolo dettaglio? :) – Pitto

11

Usa

print line, 

o

file.write(line) 

per fissare nuove righe in più.

A partire dal [Ctrl] - [M] - che è probabilmente causato da file di input nella codifica DOS.

+0

Grazie. La tua soluzione rimuove le righe vuote ma ha ancora i caratteri Ctrl-M.Un'altra persona ha già suggerito una risposta che risolve entrambi per me. –

7

Invece di questo:

print line # Put back line into file 

uso questo:

print line, # Put back line into file 
6

Modificare la prima riga del ciclo for per:

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

+0

Si prega di spiegare il down-voto. Questo metodo risolve il problema di nuova riga (anche se non ero in grado di riprodurre il problema Ctrl-M, quindi non posso parlarci). – kmote

+1

Il problema con questa risposta è che è essenzialmente un "hack", rimuovendo il newline originale piuttosto che evitando di aggiungerne uno aggiuntivo in primo luogo (coperto da altre risposte un anno prima di pubblicare il tuo!). Questo è probabilmente il motivo per cui hai avuto un downvotes. –

0

causa di ogni affermazione l'iterazione di stampa si conclude con la nuova linea, si stanno ottenendo riga vuota tra le linee.

Per superare questo problema, è possibile utilizzare striscia lungo con stampa.

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

Ora è possibile vedere le righe vuote a strisce.

+0

Ciò rimuoverà anche il rientro, che potrebbe non essere desiderato. Utilizzare invece rstrip() :) – mjd2

2

Per l'aggiornamento su Python 4.3, si può semplicemente utilizzare:

print(line, end = '') 

per evitare l'inserimento di una nuova riga.

+6

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

Problemi correlati