How To Convert JSON File To CSV Using Python Vice Versa

This example will tell you how to use python built-in json and csv module to convert a csv file to a json file, it also shows how to convert a json file to csv file.

python convert between csv and json file example source files

The example files are listed in above picture. I will explain them below.

  1. CSVJSONConvertionExample.py : This is the python source code file. There define a JsonCsvConverter class in it. This class has three method, you can get each method explanation in the method comments.
  2. csv_user_info.csv :  This is the source csv file, only this file exist at beginning.
  3. json_user_info.json : This file is generated by the csv_2_json_by_reader or csv_2_json_by_dictreader method. The two method read csv data from csv_user_info.csv file and convert the data to python dictionary list object and then save the dict list object in this json file. The difference between the two method is the first method read the csv file use csv.reader object, the second method read the csv file use csv.DictReader object.
  4. new_csv_user_info.csv : This file is generated by the json_2_csv method.

CSVJSONConvertionExample.py

'''
Created on Aug 25, 2018
@author: zhaosong
'''
import csv
import os
import json

class JsonCsvConverter(object):
    
    # Convert a csv file content to a json file. Use csv.reader to read csv file data.
    def csv_2_json_by_reader(self, csv_file, json_file):

        # If the source csv_file exist.
        if(os.path.exists(csv_file)):

            # Open the csv file object with read permission.
            csv_file_object = open(csv_file, 'r')

            # Create a csv.reader object.
            csv_reader = csv.reader(csv_file_object)        

            # Save all csv file row data in a dictionary. Each row is another python dictionary.
            table_data_dict = {}

            # This list used to save csv field names.
            header_field_names_row = []

            # Save csv field names count.
            header_field_names_length = 

            # Record the row number.
            row_number =             

            # Each row in the csv_reader is a list.
            for row in csv_reader:

                # This is the header field row.
                if(row_number==):
                     header_field_names_row = row
                     header_field_names_length = len(row)
                else:
                    # Save each row data in a dictionary.
                    row_data_dict = {}

                    # Loop the row get each column value and related field name.
                    for i in range(header_field_names_length):
                        # Get column field name.
                        field_name = header_field_names_row[i]

                        # Get column value.
                        field_value = row[i]

                        # Set column name and value in row_data_dict.
                        row_data_dict[field_name] = field_value

                    # Add the row dictionary object to the table dictionary object. 
                    table_data_dict[row_number] = row_data_dict

                row_number += 1    

            # Open the json file with write permission.
            json_file_object = open(json_file, 'w')

            # Dump the table_data_dict to json file.    
            json.dump(table_data_dict, json_file_object)

            print("Convert " + csv_file + " to " + json_file + " success.")
        else:
            print(csv_file + " do not exist. ")   


    # Convert a csv file content to a json file. Use csv.DictReader to read csv file data.
    def csv_2_json_by_dictreader(self, csv_file, json_file):

        # If the source csv_file exist.
        if(os.path.exists(csv_file)):
            # Open the csv file object with read permission.
            csv_file_object = open(csv_file, 'r')

            # Create a csv.reader object.
            dict_csv_reader = csv.DictReader(csv_file_object, )            

            # Save all csv row data in a dictionary. Each row is another python dictionary.
            table_data_dict = {}
            
            # Record the row number.
            row_number = 1

            # Each row in the csv_reader is a dict list.
            for row in dict_csv_reader:

                # Set row data in table_data_dict.
                table_data_dict[row_number] = row

                row_number += 1
             
            # Open the json file with write permission.
            json_file_object = open(json_file, 'w')

            # Dump the table_data_dict to json file.    
            json.dump(table_data_dict, json_file_object)

            print("Convert " + csv_file + " to " + json_file + " success.")
        else:
            print(csv_file + " do not exist. ")           
    

    # Convert a json file content to a csv file.
    def json_2_csv(self, json_file, csv_file):

        # If the source json_file exist.
        if(os.path.exists(json_file)):

            # Get a file object with write permission.
            json_file_object = open(json_file, 'r')

            # Load JSON file data to a python dict object.
            table_dict = json.load(json_file_object)

            header_field_names_list = []

            # Convert the keys to a list. Otherwise when you call dict_keys[0] later, it will throw dict_keys do not support indexing error.
            dict_keys = list(table_dict.keys())

            dict_keys_length = len(dict_keys)
            
            if(dict_keys_length > ):
                # Get dict key.
                dict_key = dict_keys[]

                # Get related value.
                row_dict = table_dict[dict_key]

                # Because the value is also a dictionary, so call it's keys() method to get a keys list, do not forget use list() to convert it to a pure list.
                # This list will be used as the csv file headers field names.
                header_field_names_list = list(row_dict.keys())

            # Open csv file with write permission.
            csv_file_object = open(csv_file, 'w')

            # Create a csv.DictWriter object with the target csv file and specified header field names list..
            csv_dict_file_writer = csv.DictWriter(csv_file_object, fieldnames=header_field_names_list)

            # Write csv file header field names.
            csv_dict_file_writer.writeheader()

            # Get rows dict list
            rows_dict_list = list(table_dict.values())

            # Loop in the row list.
            for row_dict in rows_dict_list:
                # Write each row dict data to the csv file.
                csv_dict_file_writer.writerow(row_dict)
            
            print("Convert " + json_file + " to " + csv_file + " success.")
        else:
            print(json_file + " do not exist. ")

if __name__ == '__main__':
    converter = JsonCsvConverter()
    #converter.csv_2_json("./csv_user_info.csv", "./json_user_info.json")
    #converter.csv_2_json_by_dictreader("./csv_user_info.csv", "./json_user_info.json")
    converter.json_2_csv("./json_user_info.json", "./new_csv_user_info.csv")

csv_user_info.csv

'Name','Email','Title'
'jerry','jerry@dev2qa.com','CEO'
'tom','[email protected]','Developer'

json_user_info.json

{"1": {"'Name'": "'jerry'", "'Email'": "'[email protected]'", "'Title'": "'CEO'"}, "2": {"'Name'": "'tom'", "'Email'": "'[email protected]'", "'Title'": "'Developer'"}}

Reference

  1. Python Read/Write CSV File Example
  2. Python JSON Dump To Or Load From File Example
(Visited 331 times, 16 visits today)
READ :   Python Count Words In Text File Example

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.