2015-05-04 2 views
0

У меня есть большой текстовый файл с данными о событиях, которые я пытаюсь разобрать на csv. Структура выглядит следующим образом:Анализ текстового файла событий в Python

СТАРТ
ПОЛЬЗОВАТЕЛЯ: а
ВРЕМЯ: 1000
КЛИКОВ: 1
КОМАНДА А: 2
КОМАНДА Б: 1
КОНЕЦ
СТАРТ
ПОЛЬЗОВАТЕЛЯ: б
ВРЕМЯ: 00
CLICKS: 1
КОМАНДА A: 2
COMM И B: 1
COMMAND C: 1
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. Я думаю, для каждой строки в блоке событий мне нужно проанализировать имя столбца с помощью регулярного выражения, а затем сохранить эти имена в массиве и использовать writow (namesarray) для создания столбцов. Но я не уверен, как пропустить весь файл txt и сохранить последующие значения событий в этих столбцах.

Я новичок в python, поэтому любая помощь будет оценена.

+3

Вы пробовали что-нибудь вообще? – ODiogoSilva

+4

Я думаю, что это поможет, если вы (1) правильно отформатируете свое сообщение и (2) добавите тег [tag: python]. О, и (3) опубликуйте, что вы получили, и укажите, где вы застряли. – usr2564301

+0

Благодарим за отзыв. Я отредактировал вопрос с тегами и предоставил более подробную информацию о том, где я застрял – user1735330

ответ

2

Что-то вроде:

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) 
+0

Спасибо kaz, я получаю «недопустимый синтаксис» "ошибка на строке myDict {'USER': thisLine [6:]}. Эта часть: elif «USER» в этой строке: myDict {'USER': thisLine [6:]} проверьте, есть ли строка с «USER», и если да, сохраните это значение в столбце user? – user1735330

+0

Извините, прошло некоторое время в Python - неправильный синтаксис. Я отредактирую его. И да, это подход - за исключением того, что я сначала храню все данные для строки в словаре, а затем использую csv-writer, который использует этот словарь для записи значений в соответствующие столбцы. – kaz

+0

Спасибо kaz, я все еще настраиваю свой код, но я думаю, что этот ответ даст мне то, что я ищу. Я ценю помощь! – user1735330

Смежные вопросы