Как удалить все пустые строки в файле с помощью python?

Например, у нас есть такой файл:

первая строка
вторая линия

третья строка

И в результате мы должны получить:

первая строка
вторая линия
третья строка

Используйте ТОЛЬКО питон

10 ответов

Решение
import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if line.rstrip():
        print line

with Заявление отлично подходит для автоматического открытия и закрытия файлов.

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

Другой способ

with open("file.txt") as f:
    print "".join(line for line in f if not line.isspace())
with open(fname, 'r+') as fd:
    lines = fd.readlines()
    fd.seek(0)
    fd.writelines(line for line in lines if line.strip())
    fd.truncate()

Я знаю, что вы спрашивали о Python, но ваш комментарий о Win и Linux показывает, что вы кросс-платформенны, и Perl по крайней мере такой же кроссплатформенный, как Python. Вы можете сделать это легко с помощью одной строки Perl в командной строке, без сценариев: perl -ne 'print if /\S/' foo.txt

(Я люблю Python и предпочитаю его Perl в 99% случаев, но иногда мне очень хочется, чтобы я мог создавать сценарии командной строки с ним, как вы можете с переключателем -e на Perl!)

Тем не менее, следующий скрипт Python должен работать. Если вы планируете делать это часто или для больших файлов, это должно быть оптимизировано за счет компиляции регулярных выражений.

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

Есть много способов сделать это, это только один:)

Объяснение: На платформах на базе Linux/Windows, где у нас установлена ​​оболочка ниже, решение может работать, так как модуль "os" будет доступен и пробует с Regex

Решение:

import os
os.system("sed -i \'/^$/d\' file.txt")

Вы можете использовать ниже способ удалить все пустые строки:

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

Мы также можем записать вывод в файл следующим образом:

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)            
>>> 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
>>> 

Использование понимания списка:

      with open('your_file.txt', 'r') as f:
    result = [line.strip() for line in f.readlines()]
    print(result)

Использование обычного цикла:

      with open('your_file.txt', 'r') as file:
    for line in f.readlines():
        print(line.strip())

Вы пробовали что-то вроде программы ниже?

for line in open(filename):
    if len(line) > 1 or line != '\n':
        print(line, end='')
Другие вопросы по тегам