Home > Blockchain >  Convert tab delimited data into dictionary
Convert tab delimited data into dictionary

Time:12-01

I'm trying to convert an array with a dictionary to a flattened dictionary and export it to a JSON file. I have an initial tab-delimited file, and have tried multiple ways but not coming to the final result. If there is more than one row present then save these as arrays in the dictionary

Name        file    code    file_location
TESTLIB1    443     123     location1
TESTLIB2    444     124     location2

Current Output:

{'library': 'TESTLIB2', 'file': '444', 'code': '124', 'file_location': 'location2'}

Desired Output if num_lines > 1:

{'library': ['TEST1', 'TEST2'], 'file': ['443', '444'], 'code': ['123', 123], 'file_location': ['location1', 'location2]}

Code Snippet

data_dict = {}
with open('file.tmp') as input:
    reader = csv.DictReader(input, delimiter='\t')
    num_lines = sum(1 for line in open('write_object.tmp'))
    for row in reader:
        data_dict.update(row)
        if num_lines > 1:
            data_dict.update(row)
    with open('output.json', 'w') as output:
        output.write(json.dumps(data_dict))
    print(data_dict)

CodePudding user response:

create list for each column and iterate to append row by row

import csv
import json    

# read file
d = {}
with open('write_object.tmp') as f:
    reader = csv.reader(f, delimiter='\t')
    headers = next(reader)
    for head in headers:
        d[head] = []
    for row in reader:
        for i, head in enumerate(headers):
            d[head].append(row[i])

# save as json file
with open('output.json', 'w') as f:
    json.dump(d, f)

output:

{'Name': ['TESTLIB1', 'TESTLIB2'],
 'file': ['443', '444'],
 'code': ['123', '124'],
 'file_location': ['location1', 'location2']}

CodePudding user response:

from collections import defaultdict

data_dict = defaultdict(list)
with open('input-file') as inp:
     for row in csv.DictReader(inp, delimiter='\t'):
          for key, val in row.items():
              data_dict[key].append(val)
print(data_dict)
# output
{'Name': ['TESTLIB1', 'TESTLIB2'],
 'file': ['443', '444'],
 'code': ['123', '124'],
 'file_location': ['location1', 'location2']}
  • Related