【问题标题】:Python: Split text by keyword into excel rowsPython:按关键字将文本拆分为excel行
【发布时间】:2018-11-08 12:58:52
【问题描述】:

编程新手,已经找到了很多有用的线程,但不是我需要的。
我有一个看起来像这样的文本文件:

  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' 将是最好的解决方案。所以重复出现的关键字是 BODY: 可能还有 DOCUMENTS。如何仅将这些关键字之间的文本提取到 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)

【问题讨论】:

    标签: python regex text extract sentiment-analysis


    【解决方案1】:

    使用文件使用with open('F:\text.txt', mode),其中mode'r' 用于读取,'w' 用于写入,提取内容使用re.findall,最后您需要转义新行\n,双引号@ 987654327@也许还有其他角色。

    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)
    

    另一个注意事项:尝试使用小内容

    【讨论】:

    • 谢谢,我会努力的! (r'BODY:(.+?)\d\sof\s5000 BODY: 之后的部分是做什么的?
    • 正则表达式捕获BODY:2 of 5000 DOCUMENTS之间的文本
    • 好的,谢谢你的解释,我把它改成d\sDOCUMENTS。需要明确的是,我现在在 7 个文档上运行它,所以有 7 篇新闻文章。他们每个人都有一个“正文:”,在文本的开头和每篇文章的结尾都写着“x of 7 DOCUMENTS”。我希望每个文本正文都出现在 result.csv 的单独单元格中,因此在这种情况下,我将有一个包含 1 列和 7 行的 result.csv。现在,它提取文本的主体,但是它将它们放在同一个单元格中,紧挨着彼此。 \n 也出现在 excel 文件中
    • 删除 \n.replace('\n', '') 。如果都在同一个单元格中,则应该是您的 csv 程序不使用逗号 , 作为分隔符。您可以在此处更改逗号分隔符'"%s",'
    • 非常感谢,解决了分离问题。但是现在它只在第一个单元格中写了第一篇文章,我如何循环/重复它,所以它一直持续到它找不到更多的 BODY: 下文档?
    猜你喜欢
    • 2022-12-15
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-08
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多