Как конвертировать CSV в JSON - Python - PullRequest
0 голосов
/ 17 февраля 2020

У меня возникают проблемы при преобразовании URL-адреса из файла CSV в json, при изменении любых изменений всегда отображается следующая ошибка:

Traceback (последний вызов был последним): File "c: / Users / Gamer / Downloads / TimingReady / PC / archivos / prueba.py ", строка 8, с открытым (csvUrl) как csvFile: OSError: [Errno 22] Недопустимый аргумент: 'http://localhost/_144141/api/0WUFVJB4ZTBENW5F6JT3QAUV4ASMRH10.csv '

Мой код выглядит следующим образом:

            import csv
            import json

            csvUrl = input("Paste the event URL: ")
            jsonFinal = "jsonEvento.json"

            data = {}
            with open(csvUrl) as csvFile:
                csvReader = csv.DictReader(csvFile)
                for csvRow in csvReader:
                    Place = csvRow["Place"]
                    data[Place] = csvRow

            root = {}
            roo["Participantes"] = data

            with open(jsonFinal, "w") as jsonFile:
                jsonFile.write(json.dumps(root, indent=4))

И файл CSV выглядит следующим образом:

"Place"; "Chip ";" Numero ";" Apellido ";" Nombre ";" Tiempo "" 1. ";" 739 ";" 139 ";" MARTINEZ GUTIERREZ ";" JOSE ";" 00: 30: 12,91 "" 2 . ";" 707 ";" 107 ";" SUAREZ MORERA ";" DANIEL ";" 02: 00: 17,54 "" 3. ";" 1686 ";" 274 ";" RODRIGUEZ VARGAS ";" JOSE LUIS ";" 02: 01: 09,09 "" 4. ";" 761 ";" 161 ";" GONZALEZ MORENO ";" MAURICIO ALBERTO ";" 02: 03: 18,29 "" 5. ";" 775 ";" 175 ";" HERNANDEZ ";" ALEJANDRO ";" 02: 05: 05,93 "" 6. ";" 1709 ";" 297 ";" CASTILLO ";" JOSE GREGORIO ";" 02:09: 51,26 "" 7. ";" 721 ";" 121 ";" TELLEZ CRUZ ";" CARLOS ALBERTO ";" 02: 11: 08,34 "" 8. ";" 1711 ";" 299 ";" МЕДИНА ДЖАРАМИЛЛО ";" ДЖЕФЕРСОН " ; "02: 12: 26,48", "9."; "766"; "166"; "JIMENEZ"; "ФРАНЦИЯ ELIAS"; "02: 12: 44,48" "10."; "1671"; "259"; "GOMEZ PRIETO"; "JEAN JENNER"; "02: 14: 03,54" "11."; "778"; "178"; "CAMPO SARMIENTO"; "JOSE FRANCISCO"; "02:15 : 45,05 "" 12. ";" 1702 ";" 290 ";" BUITRA GO HERNANDEZ ";" NORBEY ";" 02: 15: 45,49 "

Который я нужно JSON вот так

            {
                "nombreEvento": "Intercontinental Sunset Cartagena",
                "participantes": [
                    {
                    "Apellido": "MARTINEZ GUTIERREZ",
                    "Chip": 739,
                    "Nombre": "JOSE",
                    "Numero": 139,
                    "Place": "1.",
                    "Tiempo": "00:30:12,91"
                    },
                    {
                    "Apellido": "SUAREZ MORERA",
                    "Chip": 707,
                    "Nombre": "DANIEL",
                    "Numero": 107,
                    "Place": "2.",
                    "Tiempo": "02:00:17,54"
                    },
                    {
                    "Apellido": "RODRIGUEZ VARGAS",
                    "Chip": 1686,
                    "Nombre": "JOSE LUIS",
                    "Numero": 274,
                    "Place": "3.",
                    "Tiempo": "02:01:09,09"
                    }
                ]
            }

Я хочу сделать Python потоковый CSV-файл в режиме реального времени на json.

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Благодаря Тимо Фриу nnet

В моем случае мне потребовался ручной способ добавить «EventName», а также URL-адрес, потому что программа, которую я использую, не предоставляет мне объект RestApi

            import csv
            import json
            from io import StringIO
            from urllib.request import urlopen

            url = input("Pega aqui la URL de RaceResult: ")
            data = []
            final = {}

            csvfile = urlopen(url).read().decode('ascii', 'ignore')
            datafile = StringIO(csvfile)

            csvReader = csv.DictReader(datafile, delimiter=';')
            for csvRow in csvReader:
                print(csvRow)
                data.append(csvRow)

            final['nombreEvento'] = input("Escribe el Nombre del Evento: ")
            final['participantes'] = data
            jsonFinal = "jsonEvento.json"
            with open(jsonFinal, "w") as jsonFile:
               jsonFile.write(json.dumps(final, indent=4))
0 голосов
/ 17 февраля 2020

Из вашего сообщения об ошибке я могу прочитать, что ваш код не может получить доступ к файлу. Это потому, что функция open () может только читать / записывать файлы с вашего локального диска. Если вы хотите получить файл из API, например (даже если это localhost), вам нужен другой пакет для этого. Изучите это руководство, чтобы получить нужный CSV-файл: https://www.powercms.in/blog/how-get-json-data-remote-url-python-script

Я бы посоветовал при кодировании создавать приложение шаг за шагом. Поэтому сначала начните с загрузки CSV, напечатав его на консоли. Как только это сработает, продолжайте переводить его в формат json.

Обновленное окончательное решение для этой спецификации c case:

import csv
import json
from io import StringIO
from urllib.request import urlopen

url = input("Pega aqui la URL de RaceResult: ")
data = []
final = {}

csvfile = urlopen(url).read().decode('ascii', 'ignore')
datafile = StringIO(csvfile)

csvReader = csv.DictReader(datafile, delimiter=';')
for csvRow in csvReader:
    print(csvRow)
    data.append(csvRow)

final['nombreEvento'] = "Intercontinental Sunset Cartagena"
final['participantes'] = data
jsonFinal = "jsonEvento.json"
with open(jsonFinal, "w") as jsonFile:
   jsonFile.write(json.dumps(final, indent=4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...