Вы можете прочитать все как одну строку - file.read()
- и затем вы можете попытаться разделить на "\n\n"
, что означает пустую строку. И позже вы можете заменить "\n"
на " "
в строках.
Проблема может быть, если в пустых строках есть пробелы или символы табуляции.
Пример
text = '''one
two
three
four
five
six
seven
eight'''
data = text.split('\n\n')
data = [text.replace('\n', ' ') for text in data]
print(data)
Результат
['one two', 'three four five', 'six', 'seven eight']
РЕДАКТИРОВАТЬ:
Если вам нужно работать со списком, вы можете объединить все строки из списка и использовать предыдущий код, но проблема составляет '\n', '\n', '\n'
(или больше \n
), которые создают пустые строки, и потребуется regex
для преобразования всех \n\n\n...
в \n\n
. Вы также можете использовать что-то подобное. И это решает проблему с '\n', '\n', '\n'
.
Кстати: я использую io.StringIO
только для простого моделирования файла с данными
text = '''one
two
three
four
five
six
seven
eight'''
import io
lines = io.StringIO(text).readlines()
print(lines)
results = []
row = []
for line in lines:
line = line.rstrip()
if line:
#if not row:
# results.append('\n')
row.append(line)
else:
if row:
results.append(' '.join(row))
row = []
# for last element this code has to be after loop
if row:
results.append(' '.join(row))
row = []
print(results)
print('\n\n'.join(results))
Результаты
['one\n', 'two\n', '\n', 'three\n', 'four\n', 'five\n', '\n', 'six\n', '\n', '\n', '\n', 'seven\n', 'eight']
['one two', 'three four five', 'six', 'seven eight']
one two
three four five
six
seven eight
Кстати: если вы прокомментировали строку if not row: results.append('\n')
, то вы get
['\n', 'one two', '\n', 'three four five', '\n', 'six', '\n', 'seven eight']
И вы можете получить results[1:]
, чтобы пропустить сначала \n