Объединить строки между пустыми строками - python - PullRequest
0 голосов
/ 02 марта 2020

У меня есть список строк из текстового файла, где мне нужно объединить строки, которые являются последовательными и отделены от другой строки пустыми строками. Я получаю неправильный вывод, если сначала пытаюсь очистить пустые строки, а затем присоединить их, если l oop четных чисел.

one
two

three
four
five

six

seven
eight

Я пытаюсь прочитать файл или список со строками, чтобы напечатать выше как

one two

three four five

six

seven eight

список выглядит следующим образом '\n', '\n', '\n', 'EMM - Freedom\n', 'MrSuicideSheep\n', '\n',

Редактировать:

Я видел тот же ответ в аналогичном вопросе, но Я пытаюсь сделать эту вещь в списке, который я уже сделал некоторые операции. как я упоминал выше, списки выглядят так:

['\n', '\n', '\n', 'EMM - Freedom\n', 'MrSuicideSheep\n', '\n']. 

, чтобы получить ожидаемый результат, мне нужно удалить \ n из всех слов, от которых ожидается следующий элемент, как '\ n' позже, я может раздеть это, чтобы избавиться от всех ненужных русских. сейчас я удалил все \ n 'из всех предложений, оставив пустые строки для разделения. так что теперь это выглядит так:

['\n', '\n', '\n', 'EMM - Freedom', 'MrSuicideSheep', '\n'] 

Теперь, возможно, мне следует удалить только один \ n. лол, извините за усложнение. Кстати, я на самом деле работаю для этого git, если у вас есть лучшее решение, оставьте комментарий ниже.

1 Ответ

1 голос
/ 02 марта 2020

Вы можете прочитать все как одну строку - 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

...