如何从一个文件特定段落中(文本文件),读取相关的文件信息,并进行分段梳理

来源:互联网 发布:印度为何越界知乎 编辑:程序博客网 时间:2024/05/16 18:43

在某个文件中,如何读取对应指定段落中的内容,并按照一定规则进行整理,本博客针对这个问题,进行简单梳理。

通过Python进行实现,非常的方便。


例如某个文件的内容如下 (FileName):

***test case****
Add_New_Context
    Click_New_Context
    Add_Name ${Name}
    Add_Phone ${Number}
    Click_Save
Find_Context
    Input_Name ${Name}
    Click_OK

**keyword***
Click_New_Context
    Open(Context)

需要分别读取对应Test Case 下和 KeyWord 下面的所有内容,并进行分段标记。


 可以先定义一个函数 FindMessageBlock(FileName, StartKeywords, EndKeyWords)。

其中:FileName 指,需要读取的某个特点文件。

StartKeywords 指,特定段落开始的关键字。

EndKeyWords 指,特定段落结束的关键字,如果没有文件中没有结束关键字,默认到最后一行。

实现如下:

def FindMessageBlock(FileName, StartKeywords, EndKeyWords):
    try:
        FileOpen=open(FileName, 'r')
    except:
        print ("open file error")
        return []

    FileContext=FileOpen.readlines()
    LineNum=0
    FirstLineNum=0
    FindEndKeyFlag=0
    EndLineNum=len(FileContext)
    for LineContext in FileContext:
        LineNum+=1
        if 0==LineContext.find(StartKeywords):
                FirstLineNum=LineNum
                break
    
    for LineContext in FileContext[LineNum:] :
        LineNum+=1
        if 0==LineContext.find(EndKeyWords):
            EndLineNum=LineNum
            FindEndKeyFlag=1
            break

    if FirstLineNum==0:
        return []

    # get the message block from FirstLineNum:EndLineNum
    MessageFirstLineNum=FirstLineNum
    if FindEndKeyFlag==1:
        MessageEndLineNum=EndLineNum-1
    else:
        MessageEndLineNum=EndLineNum
    FirstGetMessageFlag=1
    MessageBlockList=[]
    LineNum=FirstLineNum
    for MessageLineContext in FileContext[FirstLineNum:EndLineNum-1] :
        LineNum+=1
        if 0!=MessageLineContext.find("    ", 0, 4) and 1==FirstGetMessageFlag:
            MessageBlock=[MessageLineContext,LineNum,  MessageEndLineNum]
            FirstGetMessageFlag=0
            MessageBlockList.append(MessageBlock)
            continue
        if 0!=MessageLineContext.find("    ", 0, 4)  and 0==FirstGetMessageFlag:
            MessageBlockList[len(MessageBlockList)-1][2]=LineNum-1
            MessageBlock=[MessageLineContext,LineNum,  MessageEndLineNum]
            MessageBlockList.append(MessageBlock)
    
    if len(MessageBlockList)==0:
        return []

    if len(MessageBlockList)==1 and '\n'==MessageBlockList[0][0]:
        return []

    if '\n'==MessageBlockList[len(MessageBlockList)-1][0] :
        #remove the last space line 
        MessageBlockList=MessageBlockList[:(len(MessageBlockList)-1)]
    return MessageBlockList

实验一下,用下面实验一下即可。

Start="**keyword"
End="***test case*"
a=FindMessageBlock(File, Start, End)
print(str(a))
b=FindMessageBlock(File, End, Start)
print(str(b))

***全文完***

0 0
原创粉丝点击