Перебор текстового файла с Python и сохранение группы строк в отдельных массивах - PullRequest
1 голос
/ 01 июля 2019

У меня есть такой текстовый файл -------

important unimportant
important unimportant
important unimportant
unimportant
unimportant
important unimportant
important unimportant   
important unimportant
unimportant
unimportant
important unimportant
important unimportant
important unimportant

В этом текстовом файле я хочу извлечь только «важные» части и сохранить три строки подряд с «важными» в одном массиве, разделенном запятыми. Затем я хотел бы создать массив с массивами, упомянутыми ранее.

Я не очень знаком с Python и пакетами, связанными с извлечением текста.

Я не уверен, как подойти к этой проблеме. Я был бы очень признателен за помощь.

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вы не много делитесь, но ясно одно:

  • вы можете как-то отличить важную строку от неважной;
  • вы хотите прочитать каждую строку файла
  • вы хотите, чтобы последовательные «важные» результаты были сгруппированы вместе

Цикл над файлом:

with open('myfile.txt', 'r') as f:
    for line in f:
        # do something with `line`

Вы можете собирать строки, которые важны в списке, и всякий раз, когда вы достигаете неважной строки или конца файла, если в этом списке есть строки, добавляйте его в свой результат.

Собираем все вместе:

def is_important(line):
    return 'important' in line.split()  # replace with an actual test


result = []
with open('myfile.txt', 'r') as f:
    important = []
    for line in f:
        if is_important(line):
            important.append(line)
        elif important:
            result.append(important)
            important = []
# done reading, add remaining important lines to result
if important:
    result.append(important)

print(result)

Этот код работает для вашего примера, просто измените is_important, чтобы он имел смысл.

Обратите внимание, что пример кода будет содержать символ новой строки в конце каждой строки - есть разные способы избавиться от него, в зависимости от того, хотите ли вы прочитать весь файл сразу или по одной строке за раз. Не должно быть трудно понять это самостоятельно.

Если вы искали одно из этих коротких, но трудно читаемых решений:

from itertools import groupby


def is_important(line):
    return 'important' in line.split()  # replace with an actual test


result = [list(x) for c, x in groupby(open('myfile.txt', 'r').readlines(), lambda x: is_important(x)) if c]

print(result)
0 голосов
/ 01 июля 2019

AFAIU попробуйте использовать:

with open('file2.txt', 'r') as f:
    l = []
    c = 0
    s = []
    for line in f.readlines() + ['']:
        if 'important ' in line:
            c += 1
            s.append('important')
        else:
            l.append(', '.join(s))
            c = 0
            s.clear()
    print(list(filter(None, l)))

Вывод:

['important, important, important', 'important, important, important', 'important, important, important']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...