2010-03-03 13 views
14

Por ejemplo, podemos tener algún archivo así:¿Cómo borrar todas las líneas en blanco en el archivo con la ayuda de python?

primera línea
segunda línea

tercera línea

Y en consecuencia tenemos que:

primera línea
segunda línea
tercera línea

Uso SOLO pitón

+5

sus comentarios y respuestas tentativas. Trataremos de ayudarte. –

+3

En realidad es trivial con grep, ej. 'grep -v '^ $' file' –

+1

Debería funcionar tanto en win como en linux, por lo que podemos usar SOLO python, no grep =) – user285070

Respuesta

22
import fileinput 
for line in fileinput.FileInput("file",inplace=1): 
    if line.rstrip(): 
     print line 
+1

+1 para también capturar líneas que contengan espacios en blanco y nada más. –

+2

Esto cambiará para el formato de espacios en blanco, incluso en las buenas líneas –

+1

no entiendo, ¿con qué formato? ¿cuidado para elaborar? – ghostdog74

1
>>> s = """first line 
... second line 
... 
... third line 
... """ 
>>> print '\n'.join([i for i in s.split('\n') if len(i) > 0]) 
first line 
second line 
third line 
>>> 
+0

Depende de lo que signifique "en blanco"; esto solo funciona si el espacio en blanco significa "nada en absoluto". Si hay espacios entre la segunda línea y la tercera línea, esto fallará. Además, necesita trabajar en los archivos :) Pero me gusta que no haya tenido que importar expresiones regulares :) – Chirael

+0

@Chirael - para ese caso, puede agregar simplemente len (i.strip())> 0 –

4

Sé que preguntó acerca de Python, pero su comentario sobre Win y Linux indica que lo que busca es multiplataforma-dad, y Perl es al menos tan multiplataforma como Python. Puede hacerlo fácilmente con una línea de Perl en la línea de comandos, sin scripts necesarios: perl -ne 'print if /\S/' foo.txt

(Amo Python y lo prefiero a Perl el 99% del tiempo, pero a veces realmente deseo poder hacer una línea de comandos scripts con él como puedas con -e cambiar a Perl!)

Dicho esto, la siguiente secuencia de comandos de Python debería funcionar. Si espera hacer esto a menudo o para archivos grandes, debe optimizarse con la compilación de las expresiones regulares también.

#!/usr/bin/python 
import re 
file = open('foo.txt', 'r') 
for line in file.readlines(): 
    if re.search('\S', line): print line, 
file.close() 

Hay un montón de maneras de hacer esto, eso es sólo una :)

+2

Puede hacer scripts de línea de comando con python usando el indicador '-c'. Desafortunadamente, tendría que usar varias líneas (o separación con;) para leer desde la entrada estándar. –

20

La declaración with es excelente para abrir y cerrar archivos de forma automática.

with open('myfile','rw') as file: 
    for line in file: 
     if not line.isspace(): 
      file.write(line) 
+4

+1 para el uso de "con" y buena iteración pitonica a través de líneas, además de no mutar las buenas líneas de salida. –

+2

Parece que tiene que abrir myfile con el indicador 'r +' en lugar de 'rw' de acuerdo con https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files – furins

+2

Esta solución parece al igual que tendría problemas de búfer/sobrescritura para cualquier archivo más grande que el tamaño del búfer de entrada. Y si no lo hace, ¿alguien puede explicar por qué? –

7
import sys 
with open("file.txt") as f: 
    for line in f: 
     if not line.isspace(): 
      sys.stdout.write(line) 

Otra forma es

with open("file.txt") as f: 
    print "".join(line for line in f if not line.isspace()) 
0

¿Ha intentado algo así como el programa de abajo?

for line in open(filename): 
    if len(line) > 1 or line != '\n': 
     print(line, end='') 
0

Se puede utilizar más adelante manera de eliminar todas las líneas en blanco:

with open("new_file","r") as f: 
for i in f.readlines(): 
     if not i.strip(): 
      continue 
     if i: 
      print i, 

También podemos escribir el resultado en presentar mediante el siguiente manera:

with open("new_file","r") as f, open("outfile.txt","w") as outfile: 
for i in f.readlines(): 
     if not i.strip(): 
      continue 
     if i: 
      outfile.write(i)    
Cuestiones relacionadas