Вы можете разделить разделы на \n\n
, а затем объединить каждый раздел, разделив на \n
:
with open("data.txt") as f:
for line in f.read().split("\n\n"):
print("".join(line.split("\n")) + "\n")
Вывод:
This is the Name of the Person
This is his surname
He likes to sing every time.
Если вы хотите написать Вывод обратно в новый файл, вы можете сделать это:
with open("data.txt") as f, open("output.txt", mode="w") as o:
for line in f.read().split("\n\n"):
o.write("".join(line.split("\n")) + "\n\n")
Нам нужно добавить дополнительный \n
, потому что мы не печатаем.
output.txt
This is the Name of the Person
This is his surname
He likes to sing every time.
Другой вариант - собрать все строки в одну строку, а затем записать все содержимое строки в файл:
with open("data.txt") as f, open("output.txt", mode="w") as o:
lines = "\n\n".join("".join(line.split("\n")) for line in f.read().split("\n\n"))
o.writelines(lines)
Проблема с вышеуказанными решениями заключается в том, что они считывают все содержимое файла в память с помощью read()
перед обработкой, что может быть медленным для больших файлов.
Вместо этого мы могли бы создать функцию генератора, которая выдает разделы из файла:
def collect_file_sections(f):
section = []
for line in f:
line = line.strip()
if line:
section.append(line)
continue
yield section
section = []
yield section
Затем напишите разделы следующим образом:
with open("data.txt") as f, open("output.txt", mode="w") as o:
o.writelines("\n\n".join(" ".join(section) for section in collect_file_sections(f)))