Thursday, April 28, 2011

need to put a nested Dict into a text file

I have a nested dict like this

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

data1,data2,data3 represent the type of data and not the data itself I need to put this dict into a file like this.

Timestamp col1/data1 Col1/data2 col1/data3 col2/data1 col2/data2 col2/data3 (So on...)

My problem is How do I ensure that the text goes under the corresponding column?
i.e Say I have put some text under time1 column14 and I again come across column14 in another timestamp. How do I keep track of the location of these columns in the text file?

The columns are just numbers (in string form)

From stackoverflow
  • I would do it like this:

    #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)
    
    Goutham : Thanks. Pretty much what I needed.
  • I would use JSON.

    In Python 2.6 it's directly available, in earlier Python's you have to download and install it.

    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()
    

    Works nicely. Easy to edit manually. Easy to parse.

0 comments:

Post a Comment