один лайнер для удаления пустых строк из файла в python?

Я ищу один liner, который удалит все пустые строки из файла в python. эквивалент python для -> grep -v '^$' file_name > file_name

8 Solutions collect form web for “один лайнер для удаления пустых строк из файла в python?”

 lines = [i for i in open(file_path) if i[:-1]] 

Если требуется записать в другой файл, вы можете использовать file_object.writelines(lines) с открывающим файлом для записи.

Следующее – не однострочный, но выполняет работу и легко читается:

 for line in open(filename): line = line.rstrip() if line != '': print line 

Это выводит результат на стандартный вывод. Редактировать этот код тривиально для печати в другом месте.

Если вы настаиваете, довольно легко преобразовать его в однострочный:

 ''.join(l for l in open(filename) if l.rstrip()) 

Без петлевого:

 open('dst','w').write(re.sub('\n\s*\n+','\n', open('src').read())) 

filter(bool, map(lambda x:x.rstrip(), open(filename)))

Если вам нужен настоящий однострочный:

 python -c 'import sys; print "".join(l for l in sys.stdin.readlines() if l.strip()),' 

который может использоваться в вашей оболочке как:

 cat input.txt | python -c 'import sys; print "".join(l for l in sys.stdin.readlines() if l.strip()),' > output.txt 

Если вы хотите обрабатывать большие файлы, не беспокоясь об ошибках из-за памяти, вы должны сделать это в цикле:

 import sys for line in sys.stdin: if line[:-1]: sys.stdout.write(line) 

Если у вас должен быть один лайнер, вот один и тот же код в одной строке:

 for _ in (sys.stdout.write(line) for line in sys.stdin if line[:-1]): pass 

EDITED включил подсказку agf.

 os.system("grep -v '^$' file_name > file_name") 

Модуль fileinput имеет опцию 'inplace', предназначенную для редактирования файлов за один шаг. Пока файл читается, стандартный вывод временно перенаправляется во входной файл.

Вот один лайнер, который будет делать то, что вы хотите (сделано в bash):

 python -c $'import sys, re, fileinput\nfor line in fileinput.input("file_name", inplace=True): sys.stdout.write( re.sub(r"^\\n$", "", line) )' 
  • Для чего нужны очереди кучи?
  • Разница между методами класса и экземпляра
  • Как проверить ввод с огромным списком?
  • Как сделать завершающую косую черту необязательной с помощью webapp2?
  • Найти путь модуля без импорта в Python
  • Python: NameError: 'self' не определен
  • Python: выполняет ли итерация через «list » первую копию этой части списка (что может быть дорого)?
  • Conda: установка / обновление непосредственно из github
  • Python - лучший язык программирования в мире.