Python 3.x 如何分别处理每个“文本块”
希望你能帮忙 我有一个类似下面的文件。有许多行文本与条目关联。每个条目之间用空格分隔*********** 我编写了一些代码,在每行中循环,检查一些条件,然后将输出写入csv。然而,我不知道如何对整个部分,而不是每一行这样做 我有点想让线路在线路上循环。但我需要对文档中的每个部分都这样做 有人能帮忙吗 我的尝试: 分割线似乎不起作用Python 3.x 如何分别处理每个“文本块”,python-3.x,Python 3.x,希望你能帮忙 我有一个类似下面的文件。有许多行文本与条目关联。每个条目之间用空格分隔*********** 我编写了一些代码,在每行中循环,检查一些条件,然后将输出写入csv。然而,我不知道如何对整个部分,而不是每一行这样做 我有点想让线路在线路上循环。但我需要对文档中的每个部分都这样做 有人能帮忙吗 我的尝试: 分割线似乎不起作用 import csv from itertools import islice output = "Desktop/data.csv" f = open("Des
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])
文件:
您可以首先使用方法分隔条目
这将在示例文件中循环,将每个“部分”拆分为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))
您可以删除print语句并对结果执行所需的操作。但是,这种形式的解析不是很好,因为如果文件没有正好50个星号,这将中断
如果您的示例与实际数据相符,则if检查将跳过任何空条目。我建议创建一个函数get_sections,该函数将返回生成器,每次生成一个节。这样,您就不必将整个文件加载到内存中 def get_部分: 使用openDesktop/mpe.txt作为f: 节=[] 对于f中的行: 如果**********不一致: 第1节附录行 其他: 屈服截面 节=[] 对于get_部分中的部分: 打印新部分 对于段中的行: 印刷线 你在这里处理吗
请您将建议的代码修复为实际运行的状态好吗?如果星号的数量不能保证,您可以使用正则表达式,例如:sections=re.compile^\*+$,re.MULTILINE.splitf.read
f = open("Desktop/mpe.txt", "r")
sections = f.read().split("*************************************************\n")
for section in sections:
for line in section.split("\n"):
# your code here
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))