Как удалить все пустые строки в файле с помощью python? - PullRequest
16 голосов
/ 03 марта 2010

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

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

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

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

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

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

Ответы [ 9 ]

25 голосов
/ 03 марта 2010

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

with open('myfile','rw') as file:
    for line in file:
        if not line.isspace():
            file.write(line)
25 голосов
/ 03 марта 2010
import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if line.rstrip():
        print line
7 голосов
/ 03 марта 2010
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())
4 голосов
/ 03 марта 2010

Я знаю, что вы спрашивали о 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()

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

1 голос
/ 23 апреля 2019
with open(fname, 'r+') as fd:
    lines = fd.readlines()
    fd.seek(0)
    fd.writelines(line for line in lines if line.strip())
    fd.truncate()
1 голос
/ 03 марта 2010
>>> 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 голосов
/ 22 апреля 2019

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

Решение:

import os
os.system("sed -i \'/^$/d\' file.txt")
0 голосов
/ 22 декабря 2016

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

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)            
0 голосов
/ 04 марта 2010

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

for line in open(filename):
    if len(line) > 1 or line != '\n':
        print(line, end='')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...