Как найти комбинацию ключевых слов в текстовом файле, извлечь строки сверху и снизу, а затем экспортировать в Excel с помощью панд - PullRequest
0 голосов
/ 15 мая 2019

Я пытаюсь извлечь 5 строк до и после определенной комбинации ключевых слов из нескольких заявок SEC 10-K, а затем экспортировать эти данные в Excel, чтобы затем я мог обработать их вручную. К сожалению, мне приходится полагаться на документы в формате .txt, а не на .html или .xblr, поскольку последние не всегда доступны. Я уже загрузил и частично очистил файлы .txt, чтобы удалить ненужные теги.

Короче говоря, моя цель состоит в том, чтобы сказать python циклически перебирать загруженные файлы .txt (например, все файлы в одной папке или просто путем предоставления справочного списка .txt со всеми именами файлов), открывать каждый из них, искать слово «совокупный эффект» (в идеале, в сочетании с другими ключевыми словами, см. код ниже), извлечь 5 строк до и после него, а затем экспортировать выходные данные в Excel с именем файла в столбце A и извлеченным абзацем в столбце B.

Используя этот код Мне удалось извлечь 5 строк выше и ниже ключевого слова "кумулятивный эффект" для одного файла .txt (который вы можете найти здесь , для справки). Однако я все еще борюсь с автоматизацией / циклом всего процесса и экспортом извлеченного текста в Excel, используя панд.

import collections
import itertools
import sys
from pandas import DataFrame

filing='0000950123-94-002010_1.txt'

#with open(filing, 'r') as f:
with open(filing, 'r', encoding='utf-8', errors='replace') as f:
    before = collections.deque(maxlen=5)
    for line in f:
        if ('cumulative effect' in line or 'Cumulative effect' in line) and ('accounting change' in line or 'adoption' in line or 'adopted' in line or 'charge' in line):
            sys.stdout.writelines(before)
            sys.stdout.write(line)
            sys.stdout.writelines(itertools.islice(f, 5))
            break
        before.append(line)

findings = {'Filing': [filing],
        'Extracted_paragraph': [line]
        }

df = DataFrame(findings, columns= ['Filing', 'Extracted_paragraph'])

export_excel = df.to_excel (r'/Users/myname/PYTHON/output.xlsx', index = None, header=True)

print (df)

Используя эту строку кода, я получаю нужный абзац, но мне удалось экспортировать только одну строку, в которой содержится ключевое слово, чтобы преуспеть, а не весь текст. Это вывод Python и это экспортированный текст в Excel .

Как мне создать цикл и правильно экспортировать весь интересующий абзац в excel? Большое спасибо заранее !!

1 Ответ

0 голосов
/ 15 мая 2019

Я считаю, что ваша основная ошибка была в

'Extracted_paragraph': [line]

, которая должна была быть

'Extracted_paragraph': [before]

Так что с некоторыми упрощающими изменениями основной раздел вашего кода должен выглядеть следующим образом:

with open(filing, 'r', encoding='utf-8', errors='replace') as f:
  before = collections.deque(maxlen=5)

  for line in f:       
      if ('cumulative effect' in line or 'Cumulative effect' in line) and ('accounting change' in line or 'adoption' in line or 'adopted' in line or 'charge' in line):
          break
      before.append(line)

before = ''.join(before)
findings = {'Filing': [filing],
        'Extracted_paragraph': [before]
        }

df = DataFrame(findings, columns= ['Filing', 'Extracted_paragraph'])

А затем продолжите оттуда, чтобы экспортировать в Excel и т. Д.

...