如何分别处理文本的每个“块”

时间:2019-09-18 09:17:08

标签: python-3.x

希望您能提供帮助。

我有一个类似下面的文件。与条目关联的文本行很多。每个条目都用***********

分隔

我写了一些代码,循环遍历每一行,检查一些条件,然后将输出写到csv中。但是,我不知道如何针对整个部分而不是针对每一行。

我有点想要WHILE线<> *****遍历这些线。但是我需要对文档中的每个部分进行此操作。

任何人都可以提供帮助吗?

我的尝试: 分割线似乎不起作用

import csv
from itertools import islice

output = "Desktop/data.csv"
f = open("Desktop/mpe.txt", "r")


lines = f.readlines().splitlines('*************************************************')
print(lines)
for line in lines:
    if 'SEND_HTTP' in line:
        date = line[:10]
        if 'FAILURE' in line:
            status = 'Failure'
        else:
            status = 'Success'
        if 'HTTPMessageResponse' in line:
            response = line

with open(output, "a") as fp:
     wr = csv.writer(fp, dialect='excel')
     wr.writerow([date, status, response])

文件:

   line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    *************************************************

    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    line of text
    *************************************************

3 个答案:

答案 0 :(得分:1)

您可以首先使用str.split方法分隔条目

f = open("Desktop/mpe.txt", "r")
sections = f.read().split("*************************************************\n")
for section in sections:
    for line in section.split("\n"):
        # your code here

答案 1 :(得分:0)

这将遍历您的示例文件,以50个星号(*)字符表示的方式分割每个“部分”

fileHandle = open(r"Desktop/mpe.txt", "r")
splitItems = fileHandle.read().split("*"*49)
for index, item in enumerate(splitItems):
    if(item == ""):
        continue
    print("[{}] {}".format(index, item))

您可以删除打印语句,并根据结果执行所需的操作。但是,这种解析形式不是很好,就好像文件没有正好有50个星号一样,这会中断。

if检查会跳过所有为空的条目,如果您的示例与实际数据正确,则将获得这些条目。

答案 2 :(得分:0)

我建议创建一个函数get_sections,该函数将返回生成器,一次生成一个节。这样,您不必将整个文件加载到内存中。

def get_sections():
    with open("Desktop/mpe.txt") as f:
        section=[]
        for line in f:
            if("***********" not in line):
                section.append(line)
            else:
                yield section
                section=[]

for section in get_sections():
    print("new section")
    for line in section:
        print(line)
        ## do your processing here