Как мне сделать один словарь Python для CSV с заголовками? - PullRequest
0 голосов
/ 29 декабря 2011

Я некоторое время сидел с задачей импортировать серверные журналы из файла .txt, записать его в словарь python и записать его дальше в файл csv, чтобы сделать его читаемым в базе данных. Когда я открываю его в FX. Excel, я хочу, чтобы он был указан с заголовками.

РЕДАКТИРОВАТЬ: Мне нужно, чтобы это было общим, чтобы я мог загрузить файл журнала любой длины и все равно получить все. Редактирование завершено.

Я застрял в части записи словаря в файл CSV. Мой следующий скрипт выглядит следующим образом, и отдельные, закомментированные файлы - это попытки, которые я использовал, чтобы заставить его записать его.

    lineArray = []
    timeArray = []
    typeArray = []
    whoArray = []
    idArray = []
    msgArray = []

    infile = open('C:\SomeArea\data.txt', 'r')
    dictionary = {'time','type','who','id','msg'}
    for line in infile:
        timeInString = line[:24]
        timeInStringStripped = timeInString.strip()
        timeArray.append(timeInStringStripped)
        allTimes = ', '.join(timeArray)

#The last 4 fields was removed here to take less space

    infile.close()
    dictionary = {'time': allTimes, 'type': allTypes, 'who': allWhos, 'id': allIds, 'msg': allMsgs}

Половина попыток записать его в CSV

#<><><><><><><><><><><><><><><><><><><><><><><>#
#str = 'lement1, lement2'
#arr = ['lement1, lement2']

#import csv
#f = open('sometest2.csv', 'wb')
#wtr = csv.DictWriter(f, dictionary.viewkeys())
#for element in dictionary.viewitems():
#    print element
#    for e in element:
#        print e
#wtr.writerow(0)
#f.close()
#wtr.writerows(allTimes)
#wtr.writerows(allTypes)
#wtr.writerows(allWhos)
#wtr.writerows(allIds)
#wtr.writerows(allMsgs)
#print dictionary

#<><><><><><><><><><><><><><><><><><><><><><><>#

import csv
f = open('sometest2.csv', 'wb')
wtr = csv.DictWriter(f, dictionary.viewkeys())
for row in dictionary: f.write("%s%s" %(delimiter.join([row[name] for name in fieldnames]),lineterminator))

1 Ответ

4 голосов
/ 29 декабря 2011

Проблема в том, что код пытается написать словарь списков, а csv.DictWriter ожидает список словарей.

Правильный способ анализа ваших данных для работы с модулем csv - сохранить каждую строку в виде словаря. Следовательно вместо того, чтобы иметь что-то вроде этого:

dictionary = {'time': allTimes,
              'type': allTypes,
              'who': allWhos,
              'id': allIds,
              'msg': allMsgs}

У вас должно быть что-то вроде этого:

data = [{'time': time_row_1,
         'type': type_row_1,
         'who': who_row_1,
         'id': id_row_1,
         'msg': msg_row_1},

        ...

        {'time': time_row_n,
         'type': type_row_n,
         'who': who_row_n,
         'id': id_row_n,
         'msg': msg_row_n},
       ]

Следовательно, код для чтения из файла должен быть таким:

data = []
for line in infile:
    row = {}
    row['time'] = ...
    row['type'] = ...
    ...
    ...
    data.append(row)

и код для записи в файл будет:

wtr = csv.DictWriter(open(filename, 'w'), keys)
wtr.writerows(data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...