用Python解析文本事件文件

用Python解析文本事件文件,python,parsing,text,Python,Parsing,Text,我有一个包含事件数据的大文本文件,我正试图将其解析为csv。结构如下所示: 开始 用户:a 时间:1000次 点击:1 命令A:2 命令B:1 结束 开始 用户:b 时间:00 点击:1 命令A:2 命令B:1 命令C:1 结束 使用开始和结束标记将事件分开,我正在尝试对其进行解析以创建一个csv文件,该文件将每个事件作为一行,其他属性作为列,因此在上面的示例中,列将是用户、时间、单击、命令a、命令B、命令C,每个列的值将是以下值之后的值: 我知道此代码将读取单个事件: with open('s

我有一个包含事件数据的大文本文件,我正试图将其解析为csv。结构如下所示:

开始
用户:a
时间:1000次
点击:1
命令A:2
命令B:1
结束
开始
用户:b
时间:00
点击:1
命令A:2
命令B:1
命令C:1
结束

使用开始和结束标记将事件分开,我正在尝试对其进行解析以创建一个csv文件,该文件将每个事件作为一行,其他属性作为列,因此在上面的示例中,列将是用户、时间、单击、命令a、命令B、命令C,每个列的值将是以下值之后的值:

我知道此代码将读取单个事件:

with open('sampleIVTtxt.txt', 'r') as input_data:
for line in input_data:
    if line.strip() == 'START REPORT':
break
for line in input_data:  
    if line.strip() == 'END':
我陷入困境的是如何解析事件块中的行,并将它们存储为csv中的列和值。我想,对于事件块中的每一行,我需要使用regex解析出列名,然后将这些名称存储在数组中,并使用writerow(namesarray)创建列。但我不知道如何循环遍历整个txt文件并在这些列中存储后续事件值

我是python新手,因此如果您有任何帮助,我将不胜感激

类似于:

import csv

with open('sampleIVTtxt.csv', 'w') as csvfile:
    fieldnames = ['USER', 'TIME','CLICKS','COMMAND_A','COMMAND_B','COMMAND_C']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

    writer.writeheader()

with open('sampleIVTtxt.txt', 'r') as input_data:
for line in input_data:
    thisLine=line.strip()
    if thisLine == 'START':
       myDict={}
    elif "USER" in thisLine:
       myDict['USER'] = thisLine[6:]
     ....and so on....
    elif thisLine == 'END':
      writer.writerow(myDict)

你试过什么吗?我想如果你(1)正确设置你的帖子的格式,以及(2)添加一个标签会有所帮助。哦,还有(3)发布你得到的,并指出你的困境。谢谢你的回复。我已经用标签编辑了这个问题,并提供了更多关于我在哪里的详细信息。你会提前知道你需要哪些栏目吗?是的,我会知道一个活动可能存在的所有栏目。但是,并非所有事件都会为每个列提供输入。基本上,如果没有使用命令a,那么在该事件块中将没有该命令的行,因此我希望该行的该列只有一个0或null单元格。谢谢kaz,我在myDict{'USER'行上得到一个“无效语法”错误:thisLine[6:}。这部分:elif“USER”在thisLine:myDict{'USER':thisLine[6::}中是否检查是否有一行带有“USER”,如果是,将值存储在名为USER的列中?抱歉,使用Python已经有一段时间了-语法错误。我会编辑它。是的,这是一种方法-除了我首先将一行的所有数据存储在字典中,然后使用csv编写器使用该字典将值写入相应的列。谢谢kaz,我仍在调整代码,但我认为这个答案将满足我的需要。我感谢你的帮助!