如何将txt文件拆分为多个文件,不包括具有特定内容的行

时间:2016-01-22 11:27:53

标签: python html regex strip startswith

我有一个很大的.txt文件,我希望将其拆分成多个较小的.txt文件,因此我在每个较小的.txt文件中留下可读段落。

但是,我想要做的是将源文件的某些部分排除在写入较小的文件之外。 (即如果行不以<p>开头,则不要写入文件。)

这是我的代码 - 工作正常,除了它生成一些我不想要的文件:

import mmap
import re

filenumber = 0

out_file = None

with open('main.txt') as x:
    for line in x:
        if line.strip() == '<p>':
             filenumber += 1
            out_file = open('narrative%03d.txt' % filenumber, 'w')
        elif line.strip().startswith('</p>') and out_file:
            out_file.close()
            out_file = None
        elif out_file:
            out_file.write(line)
if out_file:
    out_file.close()

我想要做的是找出一种说法 - 运行代码,但是如果一行开始并不以<p>开头那么就什么也不做,继续其余的代码。

任何帮助将不胜感激!如果我没有提供足够的信息,请告诉我!

由于源文件包含html标签,因此向我显示源文件的最简单方法是提供指向它的链接:

https://archive.org/stream/warandpeace030164mbp/warandpeace030164mbp_djvu.txt

查看来源以查看我不想要的内容。

我只想要书中的段落 -

他的女儿,He * lene公主,通过了 - 在椅子之间,轻轻地撑起褶皱 她的衣服,笑容更加闪耀 她漂亮的脸上熠熠生辉。皮埃尔凝视着 她脸上带着狂喜,几乎受惊的眼睛 当她经过他时

&#34;非常可爱,&#34;安德鲁王子说。

我不想要包含所有HTML和章节列表等的文档的开头。

1 个答案:

答案 0 :(得分:0)

对于您提供的链接,整个文本都包含在一个巨大的<pre>...</pre>块中。因此,您可以使用BeautifulSoup轻松提取它。

首先使用requests之类的内容获取html,使用BeautifulSoup提取包含单个pre的文本,然后根据双重换行拆分文本并删除所有空条目:< / p>

from bs4 import BeautifulSoup
import requests

html = requests.get('https://archive.org/stream/warandpeace030164mbp/warandpeace030164mbp_djvu.txt')
soup = BeautifulSoup(html.text, "lxml")
war_and_peace = soup.pre.get_text()

paragraphs = war_and_peace.split('\n\n')
paragraphs[:] = [p for p in paragraphs if len(p)]       # Remove empty entries

print paragraphs[671]

结果将是一个段落列表。该脚本将显示以下内容:

His daughter, Princess He*lene, passed be- 
tween the chairs, lightly holding up the folds 
of her dress, and the smile shone still more 
radiantly on her beautiful face. Pierre gazed 
at her with rapturous, almost frightened, eyes 
as she passed him.