Python: разбить текст по ключевым словам на строки Excel - PullRequest
0 голосов
/ 08 ноября 2018

Новичок в программировании, уже нашел много полезных тем, но не совсем то, что мне нужно.
У меня есть один текстовый файл, который выглядит так:

  1 of 5000 DOCUMENTS


                    Copyright 2010 The Deal, L.L.C.
                          All Rights Reserved
                          Daily Deal/The Deal

                        January 12, 2010 Tuesday

HEADLINE: Cadbury slams Kraft bid

BODY:

  On cue .....

......

body of article here

......

DEAL SIZE

$ 10-50 Billion

                            2 of 5000 DOCUMENTS


                    Copyright 2015 The Deal, L.L.C.
                          All Rights Reserved
                           The Deal Pipeline

                      September 17, 2015 Thursday

HEADLINE: Perrigo rejects formal offer from Mylan

BODY: 
(and here again the body of this article)

DEAL SIZE

В качестве вывода я хотел бы просто ПРОСТО тело каждой статьи в новой строке (одна ячейка на тело статьи) в одном файле (у меня есть около 5000 статей для обработки, как это). Вывод будет 5000 строк и 1 столбец. Из того, что я смог найти, кажется, что 're' будет лучшим решением. Таким образом, повторяющиеся ключевые слова - это ТЕЛО: и, возможно, ДОКУМЕНТЫ. Как извлечь только текст между этими ключевыми словами в новую строку в Excel для каждой статьи?

import re
inputtext = 'F:\text.txt'
re.split(r'\n(?=BODY:)', inputtext)

или как то так?

section = []
for line in open_file_object:
if line.startswith('BODY:'):
    # new section
    if section:
        process_section(section)
    section = [line]
else:
    section.append(line)
if section:
process_section(section)

Я немного растерялся, где искать, заранее спасибо!

РЕДАКТИРОВАТЬ: Благодаря ewwink я в настоящее время здесь:

import re
articlesBody = None
with open('F:\CloudStation\Bocconi University\MSc. Thesis\\test folder\majortest.txt', 'r') as txt:
  inputtext = txt.read()
  articlesBody = re.findall(r'BODY:(.+?)\d\sDOCUMENTS', inputtext, re.S)

#print(articlesBody)
#print(type(articlesBody))

  with open('result.csv', 'w') as csv:
   for item in articlesBody:
    item = item.replace('\n', ' ')
    csv.write('"%s",' % item)

1 Ответ

0 голосов
/ 08 ноября 2018

при работе с файлом используйте with open('F:\text.txt', mode), где mode - 'r' для чтения и 'w' для записи, для извлечения содержимого используйте re.findall и, наконец, вам нужно экранировать новую строку \n, двойные кавычки " и, возможно, другой персонаж.

import re

articlesBody = None
with open('text.txt', 'r') as txt:
  inputtext = txt.read()
  articlesBody = re.findall(r'BODY:(.+?)\d\sof\s5000', inputtext, re.S)

#print(articlesBody)

with open('result.csv', 'w') as csv:
  for item in articlesBody:
    item = item.replace('\n', '\\n').replace('"', '""')
    csv.write('"%s",' % item)

еще одно примечание: попробуйте с небольшим содержанием

...