正在 Python 中解析文本事件文件
Parsing text event file in Python
我有一个包含事件数据的大型文本文件,我正在尝试将其解析为 csv。结构如下所示:
开始
用户:一个
时间:1000
点击次数:1
命令 A:2
命令 B:1
结束
开始
用户:b
时间:00
点击次数:1
命令 A:2
命令 B:1
命令 C:1
结束
使用 START 和 END 标签分隔事件,我试图对其进行解析以创建一个 csv 文件,其中每个事件作为行,其他属性作为列,因此在上面的示例中,列将是 USER、TIME、CLICKS、COMMAND A、COMMAND B、COMMAND 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 中的列和值。我在考虑事件块中的每一行,我需要使用正则表达式解析列名称,然后将这些名称存储在数组中并使用 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)
我有一个包含事件数据的大型文本文件,我正在尝试将其解析为 csv。结构如下所示:
开始
用户:一个
时间:1000
点击次数:1
命令 A:2
命令 B:1
结束
开始
用户:b
时间:00
点击次数:1
命令 A:2
命令 B:1
命令 C:1
结束
使用 START 和 END 标签分隔事件,我试图对其进行解析以创建一个 csv 文件,其中每个事件作为行,其他属性作为列,因此在上面的示例中,列将是 USER、TIME、CLICKS、COMMAND A、COMMAND B、COMMAND 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 中的列和值。我在考虑事件块中的每一行,我需要使用正则表达式解析列名称,然后将这些名称存储在数组中并使用 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)