нужно поместить вложенный Dict в текстовый файл - PullRequest
1 голос
/ 03 августа 2009

У меня есть такой вложенный диктов

d={ time1 : column1 : {data1,data2,data3}
            column2 : {data1,data2,data3}        
            column3 : {data1,data2,data3}     #So on.
    time2 : {column1: }       #Same as Above
  }

data1, data2, data3 представляют тип данных, а не сами данные Мне нужно поместить этот дикт в файл вроде этого.

Метка времени col1 / data1 Col1 / data2 col1 / data3 col2 / data1 col2 / data2 col2 / data3 (Так далее ...)

Моя проблема: как мне убедиться, что текст идет под соответствующим столбцом?
т.е. скажем, я поместил некоторый текст в столбец time1, и я снова наткнулся на столбец 14 в другой временной отметке. Как отслеживать местоположение этих столбцов в текстовом файле?

Столбцы - это просто числа (в виде строки)

Ответы [ 2 ]

3 голосов
/ 03 августа 2009

Я бы использовал JSON.

В Python 2.6 он доступен напрямую, в более ранних версиях Python его нужно загрузить и установить.

try:
    import json
exception ImportError:
    import simplejson as json

out= open( "myFile.json", "w" )
json.dump( { 'timestamp': time.time(), 'data': d }, indent=2 )
out.close()

Работает хорошо. Легко редактировать вручную. Легко разобрать.

1 голос
/ 03 августа 2009

Я бы сделал это так:

#get the row with maximum number of columns
maxrowlen = 0
maxrowkey = ""
for timesid in d.keys():
    if len(timesid.keys()) > maxrowlen:
         maxrowlen = len(timesid.keys())
         maxrowkey = timesid
maxrowcols = sorted(d[maxrowkey].keys())

# prepare the writing
cell_format = "%10r"    # or whatever suits your data

# create the output string
lines = []
for timesid in d.keys(): # go through all times
    line = ""
    for col in maxrowcols:  # go through the standard columns
         colstr = ""
         if col in d[timesid].keys():   # create an entry for each standard column
             colstr += cell_format % d[timesid][col]  # either from actual data
         else:
             colstr += cell_format % ""                      # or blanks
         line += colstr
    lines.append(line)

text = "\n".join(lines)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...