【问题标题】:Extracting specific section from txt file - python从 txt 文件中提取特定部分 - python
【发布时间】:2018-04-21 20:36:33
【问题描述】:

我想从网站https://www.sec.gov/Archives/edgar/data/3662/0000950170-98-000413.txt中提取“管理层的讨论和分析”部分

我想概括一下这个过程,以便它可以与同一网站上的其他文件一起使用:https://www.sec.gov/

【问题讨论】:

  • 到目前为止你尝试过什么?一些代码?

标签: python text document


【解决方案1】:

这是您在逐行迭代文件中的行时可以执行的操作。您可以在该部分的开头将行记录到列表中,然后在该部分的末尾或下一部分的开头停止录制。将正确的部分合并到行列表中后,您可以使用换行符“加入”列表以输出感兴趣的特定部分。对于您的特定示例,您可以这样做...

import re
import sys

recording = False
your_file = "sec.txt"
start_pattern = "^ITEM 7. MANAGEMENT'S DISCUSSION AND ANALYSIS"
stop_pattern = "^ITEM 8."
output_section = []

for line in open(your_file).readlines():
    if recording is False:
        if re.search(start_pattern, line) is not None:
            recording = True
            output_section.append(line.strip())
    elif recording is True:
        if re.search(stop_pattern, line) is not None:
            recording = False
            sys.exit()
        output_section.append(line.strip())

print '\n'.join(output_section)

最后的打印语句应该打印出以“ITEM 7. MANAGEMENT'S DISCUSSION AND ANALYSIS”和“ITEM 8”开头的行所界定的部分。请注意,胡萝卜字符与行首匹配。刚刚通过下载您指向 sec.txt 的文档在本地进行了测试,它对我有用。

您可以通过设置 start_pattern 和 stop_pattern 并将参数传递给命令行来将其推广到其他文档。例如,通过将以下代码与我上面发布的代码合并:

import sys

start_pattern = sys.argv[1]
stop_pattern = sys.argv[2]

然后你可以像这样调用你的脚本以获得与上面硬编码相同的结果:

python name_of_your_script.py "^ITEM 7. MANAGEMENT'S DISCUSSION AND ANALYSIS" "^ITEM 8."

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    使用它,您可以从特定部分中提取内容:

    extract = re.findall(r'(?<=ITEM 7.)(?s)(.*?)(?=ITEM 8.)',text) 
    

    【讨论】: