Как удалить все пустые строки в файле с помощью 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='')