2011-01-25 73 views
9

Tengo una lista de palabras que contiene devoluciones para separar cada nueva letra. ¿Hay alguna manera de eliminar programáticamente cada uno de estos retornos utilizando archivos E/S en Python?Eliminar carro de retorno/nueva línea en la salida de archivo

Editar: Sé cómo manipular cadenas para eliminar devoluciones. Quiero editar físicamente el archivo para que esas devoluciones se eliminen.

estoy buscando algo como esto:

wfile = open("wordlist.txt", "r+")   
for line in wfile: 
    if len(line) == 0: 
     # note, the following is not real... this is what I'm aiming to achieve. 
     wfile.delete(line) 
+0

Si usted tiene un diccionario en la memoria, ¿por qué es necesario involucrar al sistema de archivos? –

+1

Muestra lo que tienes hasta ahora. –

+0

Tiene un error de sintaxis, la instrucción if es incorrecta de dos maneras, le falta el final: y no se puede asignar en una instrucción if que desee usar == –

Respuesta

16
>>> string = "testing\n" 
>>> string 
'testing\n' 
>>> string = string[:-1] 
>>> string 
'testing' 

Esto básicamente dice "la tajada de la última hora de la cadena" El : es el operador de "corte". Sería una buena idea leer cómo funciona, ya que es muy útil.

EDITAR

acabo de leer su pregunta actualizada. Creo que lo entiendo ahora. Usted tiene un archivo, como este:

aqua:test$ cat wordlist.txt 
Testing 

This 

Wordlist 

With 

Returns 

Between 

Lines 

y desea deshacerse de las líneas vacías. En lugar de modificar el archivo mientras se está leyendo de ella, crear un nuevo archivo que se puede escribir las líneas que no estén vacíos desde el archivo antiguo en, así:

# script  
rf = open("wordlist.txt") 
wf = open("newwordlist.txt","w") 
for line in rf: 
    newline = line.rstrip('\r\n') 
    wf.write(newline) 
    wf.write('\n') # remove to leave out line breaks 
rf.close() 
wf.close() 

usted debe conseguir:

aqua:test$ cat newwordlist.txt 
Testing 
This 
Wordlist 
With 
Returns 
Between 
Lines 

Si quieres algo así como

TestingThisWordlistWithReturnsBetweenLines 

basta con comentar

+0

¿Qué sucede si de alguna manera una secuencia como esta pasa a su "prueba" "chopper" [: - 1] –

+0

La secuencia de comandos que usa 'rstrip' no funcionó para mí hasta que agregué' rf.close() 'y' wf .close() 'como últimas líneas: el script abre esos archivos, pero no los cierra. Efectivamente esto terminó en un 'wf' vacío. – Roland

+0

@Roland actualizado. – aqua

14

puede utilizar el método de una cadena rstrip para eliminar los caracteres de nueva línea de una cadena.

>>> 'something\n'.rstrip('\r\n') 
>>> 'something' 
3

el más eficiente es la de no especificar un valor tira

'\nsomething\n'.split() se tira de todos los caracteres y espacios en blanco especiales de la cadena

+0

Sería cuidadoso con esto ya que '" Business Consultant \ n ".split()' devolverá '['Business', 'Consultant']' –

2

eliminar las líneas vacías en el archivo:

#!/usr/bin/env python 
import fileinput 

for line in fileinput.input("wordlist.txt", inplace=True): 
    if line != '\n': 
     print line, 

El archivo se mueve a un archivo de copia de seguridad y la salida estándar se dirige al archivo de entrada.

1

simplemente use, resuelve el problema.

string.strip("\r\n") 
0
'whatever\r\r\r\r\r\r\r\r\n\n\n\n\n'.translate(None, '\r\n') 

vuelve

'whatever' 
Cuestiones relacionadas