Как преобразовать CSV в Json в правильном формате - PullRequest
0 голосов
/ 18 марта 2020

Привет Я новичок в CSV преобразование в Json с использованием python. Я пытаюсь преобразовать CSV-файл в json формат и вернуть ответ в вызове функции, но получаю sla sh символов.

Когда я открываю CSV-файл с помощью Notepad ++ this как выглядят данные

"Sno ","Name","Age ","City"
"1","Alex","27","Newyork"
"2","Smith","25","Los angeles"
"3","austin","26","Calfornia

Ожидаемый результат:

[
    {
        "Sno ": "1",
        "Name": "Alex",
        "Age ": "27",
        "City": "Newyork"
    },
    {
        "Sno ": "2",
        "Name": "Smith",
        "Age ": "25",
        "City": "Los angeles"
    },
    {
        "Sno ": "3",
        "Name": "austin",
        "Age ": "26",
        "City": "Calfornia"
    }
]

Python код:

def refresh():
    # reading the header from the csv file in an array
    with open(r"C:\Users\prasanna.kommuri\example_flask_application\target_py_files\data_file.csv", "r") as f:
        reader = csv.reader(f)
        csv_header_row = next(reader)

    #Reading the content from the csv file
    json_data = [json.dumps(d) for d in csv.DictReader(open(r"C:\Users\prasanna.kommuri\example_flask_application\target_py_files\data_file.csv", 'r'), fieldnames=csv_header_row, quotechar='"', delimiter=',',
                 quoting=csv.QUOTE_ALL, skipinitialspace=True)]
    return jsonify(json_data)

Фактический результат:

[
   "{\"Sno \": \"Sno \", \"Name\": \"Name\", \"Age \": \"Age \", \"City\": \"City\"}",
   "{\"Sno \": \"1\", \"Name\": \"Alex\", \"Age \": \"27\", \"City\": \"Newyork\"}",
   "{\"Sno \": \"2\", \"Name\": \"Smith\", \"Age \": \"25\", \"City\": \"Los angeles\"}",
   "{\"Sno \": \"3\", \"Name\": \"austin\", \"Age \": \"26\", \"City\": \"Calfornia\"}"
]

Может кто-нибудь помочь, если я ошибаюсь, или какие-либо предложения / ответы будут полезны Спасибо заранее.

Ответы [ 3 ]

1 голос
/ 18 марта 2020
import json, csv

with open(r'U:\foobar.csv', 'r', newline='') as f:
    print(json.dumps(list(csv.DictReader(f)), indent=4))

печать

[
    {
        "Sno ": "1",
        "Name": "Alex",
        "Age ": "27",
        "City": "Newyork"
    },
    {
        "Sno ": "2",
        "Name": "Smith",
        "Age ": "25",
        "City": "Los angeles"
    },
    {
        "Sno ": "3",
        "Name": "austin",
        "Age ": "26",
        "City": "Calfornia"
    }
]

или для вывода в файл

with open(r'U:\foobar.csv', 'r', newline='') as fin:
    with open(r'U:\foobar.json', 'w') as fout:
        json.dump(list(csv.DictReader(f)), fout, indent=4))
0 голосов
/ 18 марта 2020

Отказ от ответственности это не объясняет, почему ваш код дает сбой, но дает альтернативное решение с использованием pandas, как вы упоминали, что вы открыты и для новых решений.

>>> import pandas as pd
>>> from io import StringIO  # that's just to pretend I have a .csv file like yours

>>> df = pd.read_csv(StringIO('''"Sno ","Name","Age ","City" 
"1","Alex","27","Newyork" 
"2","Smith","25","Los angeles" 
"3","austin","26","Calfornia"'''))                                                                                                                 

>>> print(df.to_json(orient="records", indent=4))                                                                                                                      
[
    {
        "Sno ":1,
        "Name":"Alex",
        "Age ":27,
        "City ":"Newyork "
    },
    {
        "Sno ":2,
        "Name":"Smith",
        "Age ":25,
        "City ":"Los angeles "
    },
    {
        "Sno ":3,
        "Name":"austin",
        "Age ":26,
        "City ":"Calfornia"
    }
]

Итак, в двух словах, если у вас есть путь, ведущий к вашему CSV-файлу с именем path_to_csv, это 1-строчная строка:

json_data = pd.read_csv(path_to_csv).to_json(orient="records", indent=4)
0 голосов
/ 18 марта 2020

Пожалуйста, проверьте это.

import csv
import json

def refresh():
    # reading the header from the csv file in an array
    data_dict_list = []
    with open(r"result.csv", "r") as f:
        reader = csv.reader(f)
        csv_header_row = next(reader)

        for data in reader:
            data_dict_list.append(
                {
                    csv_header_row[0]: data[0],
                    csv_header_row[1]: data[1],
                    csv_header_row[2]: data[2],
                    csv_header_row[3]: data[3],
                 }
            )

        return  json.dumps(data_dict_list, indent=4)

result = refresh()
print(result)

Вывод:

[
    {
        "Sno ": "1",
        "Name": "Alex",
        "Age ": "27",
        "City": "Newyork"
    },
    {
        "Sno ": "2",
        "Name": "Smith",
        "Age ": "25",
        "City": "Los angeles"
    },
    {
        "Sno ": "3",
        "Name": "austin",
        "Age ": "26",
        "City": "Calfornia"
    }
]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...