Per esempio, noi abbiamo qualche file del genere:Come eliminare tutte le righe vuote nel file con l'aiuto di python?
prima linea
seconda linea
terza linea
E in conseguenza dobbiamo ottenere:
prima riga
seconda riga
terza linea
Usa SOLO pitone
Per esempio, noi abbiamo qualche file del genere:Come eliminare tutte le righe vuote nel file con l'aiuto di python?
prima linea
seconda linea
terza linea
E in conseguenza dobbiamo ottenere:
prima riga
seconda riga
terza linea
Usa SOLO pitone
import fileinput
for line in fileinput.FileInput("file",inplace=1):
if line.rstrip():
print line
+1 per rilevare anche linee che contengono spazi bianchi e nient'altro. –
Questo cambierà per la formattazione degli spazi bianchi anche nelle buone linee –
non capisco, come che formattazione? cura di elaborare? – ghostdog74
>>> 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
>>>
Dipende da cosa vuol dire "vuoto" - funziona solo se vuoto significa "niente affatto". Se ci sono spazi tra la seconda riga e la terza linea, ciò fallirà. Inoltre ha bisogno di lavorare sui file :) Ma mi piace il fatto che non è necessario importare espressioni regolari :) – Chirael
@Chirael - per questo caso è possibile aggiungere solo len (i.strip())> 0 –
So che hai chiesto di Python, ma i suoi commenti su Win e Linux indica che si sta dopo cross-platform-ness, e Perl è almeno come multipiattaforma come Python. È possibile farlo facilmente con una riga di Perl sulla riga di comando, senza script: perl -ne 'print if /\S/' foo.txt
(adoro Python e lo preferisco a Perl il 99% delle volte, ma a volte vorrei davvero poter eseguire la riga di comando script con esso come è possibile con il -e passare a Perl!)
Detto questo, il seguente script Python dovrebbe funzionare. Se ti aspetti di farlo spesso o per file di grandi dimensioni, dovrebbe essere ottimizzato con la compilazione anche delle espressioni regolari.
#!/usr/bin/python
import re
file = open('foo.txt', 'r')
for line in file.readlines():
if re.search('\S', line): print line,
file.close()
Ci sono molti modi per farlo, questo è solo uno :)
È possibile eseguire script della riga di comando con python usando il flag '-c'. Sfortunatamente dovresti usare più linee (o separare con;) per leggere dallo standard input. –
La dichiarazione with
è eccellente per l'apertura e chiusura di file automaticamente.
with open('myfile','rw') as file:
for line in file:
if not line.isspace():
file.write(line)
+1 per l'uso di "with" e buona, iterazione pythonic attraverso le linee, oltre a non mutare le buone linee di output. –
Sembra che tu debba aprire myfile con 'r +' flag invece di 'rw' secondo https://docs.python.org/2/tutorial/inputoutput.html#reading-and-writing-files – furins
Questa soluzione sembra come se avesse problemi di buffer/sovrascrittura per qualsiasi file più grande della dimensione del buffer di input. E se no, qualcuno può spiegare perché? –
import sys
with open("file.txt") as f:
for line in f:
if not line.isspace():
sys.stdout.write(line)
Un altro modo è
with open("file.txt") as f:
print "".join(line for line in f if not line.isspace())
Hai provato qualcosa come il programma di seguito?
for line in open(filename):
if len(line) > 1 or line != '\n':
print(line, end='')
È possibile utilizzare sotto modo per eliminare tutte le righe vuote:
with open("new_file","r") as f:
for i in f.readlines():
if not i.strip():
continue
if i:
print i,
Possiamo anche scrivere l'output su file usando sotto modo:
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)
Condividi le tue idee e tentativi. Cercheremo di aiutarti. –
In realtà è banale con grep, ad es. 'grep -v '^ $' file' –
Dovrebbe funzionare sia con win che con linux, quindi possiamo usare SOLO python, no grep =) – user285070