在Python中解析文本文件中的段落?

时间:2016-09-15 16:14:53

标签: python list python-2.7 file

我试图从多个文本文件中解析某些段落并将它们存储在列表中。所有文本文件都有类似的格式:

MODEL NUMBER: A123

MODEL INFORMATION: some info about the model

DESCRIPTION: This will be a description of the Model. It 
could be multiple lines but an empty line at the end of each.

CONCLUSION: Sold a lot really profitable.

现在我可以将信息拉出一行,但遇到多行时会遇到麻烦(例如'描述')。描述长度是未知的,但我知道最后它会有一个空行(这意味着使用' \ n')。这就是我到目前为止所做的:

import os
dir = 'Test'
DESCRIPTION = []
for files in os.listdir(dir):
    if files.endswith('.txt'): 
        with open(dir + '/' + files) as File:
            reading = File.readlines()
            for num, line in enumerate(reading):
                if 'DESCRIPTION:' in line:
                    Start_line = num
                if len(line.strip()) == 0:

我不知道它是否是最佳方法,但我尝试使用if len(line.strip()) == 0:创建一个空行列表,然后找到比Start_Line更大的值。我看到了Bisect

最后,如果我说print Description

,我希望我的数据
['DESCRIPTION: Description from file 1', 
'DESCRIPTION: Description from file 2', 
'DESCRIPTION: Description from file 3,]

感谢。

1 个答案:

答案 0 :(得分:0)

正则表达式。可以这样考虑一下:你有一个模式可以让你把任何文件剪成你会觉得可口的文件:"换行后跟大写字母"

re.split是你的朋友

取一个字符串

"THE
BEST things 
in life are
free
IS
YET
TO
COME"

作为字符串:

p = "THE\nBEST things\nin life are\nfree\nIS\nYET\nTO\nCOME"
c = re.split('\n(?=[A-Z])', p)

哪个产生列表c

['THE', 'BEST things\nin life are\nfree', 'IS', 'YET', 'TO', 'COME']

我认为你可以从那里拿走它,因为这会将你的文件分成每个字符串列表,每个字符串都有自己的部分,然后从那里你可以找到" DESCRIPTION"元素并存储它,您会看到您将每个部分分开,包括其重新分割的子内容。重要的是要注意我设置正则表达式的方式,它识别PATTERN"换行符,然后是大写字母"但是换行后的CUTS,这就是为什么它在括号之外。