ArYad
ArYad

Reputation: 135

Converting CSV data from file to JSON

I have a csv file that contains csv data separated by ','. I am trying to convert it into a json format. For this I am tyring to extract headers first. But, I am not able to differentiate between headers and the next row.

Here is the data in csv file:

Start Date ,Start Time,End Date,End Time,Event Title 9/5/2011,3:00:00 PM,9/5/2011,,Social Studies Dept. Meeting 9/5/2011,6:00:00 PM,9/5/2011,8:00:00 PM,Curriculum Meeting

I have tried csvreader as well but I got stuck at the same issue. Basically Event Title and the date on the next line is not being distinguished.

        with open(file_path, 'r') as f:
            first_line = re.sub(r'\s+', '', f.read())
                arr = []
                headers = []
                for header in f.readline().split(','):
                    headers.append(header)
                for line in f.readlines():
                    lineItems = {}
                    for i,item in enumerate(line.split(',')):
                        lineItems[headers[i]] = item
                    arr.append(lineItems)
                print(arr)
                print(headers)
                jsonText = json.dumps(arr)
                print(jsonText)

All three print statements give empty result below.

[]
['']
[]

I expect jsonText to be a json of key value pairs.

Upvotes: 0

Views: 47

Answers (2)

wwii
wwii

Reputation: 23743

Use csv.DictReader to get a list of dicts (each row is a dict) then serialize it.

import json
import csv
with open(csvfilepath) as f:
    json.dump(list(csv.DictReader(f)), jsonfilepath))

Upvotes: 1

APerson
APerson

Reputation: 8422

In Python, each file has a marker that keeps track of where you are in the file. Once you call read(), you have read through the entire file, and all future read or readline calls will return nothing.

So, just delete the line involving first_line.

Upvotes: 1

Related Questions