Как конвертировать файл CSV в многострочном формате JSON?
Здесь's мой код, очень простые вещи...
import csv
import json
csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')
fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
out = json.dumps( [ row for row in reader ] )
jsonfile.write(out)
Объявить некоторые имена полей, читатель использует CSV, чтобы прочитать файл, и подал имен сбросить файл в формате JSON. Здесь'проблема с...
Каждой записи в CSV-файл на другую строку. Я хочу, чтобы вывод в формате JSON, чтобы быть таким же образом. Проблема сваливает все на один гигантский, длинной линии.
Я'вэ пытался использовать что-то вроде для строки в csvfile, был:
а то мой ниже, что код с читатель = CSV-файл.DictReader( строки, поля)
, который перебирает каждую строку, но это не весь файл в одну строку, затем перебирает весь файл на другой линии... продолжается, пока не закончатся строки.
Любые предложения по исправлению этого?
Редактировать:, чтобы уточнить, на данный момент у меня есть: (каждая запись в строке 1)
[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]
То, что я'м ищу: (2 записи на 2 линии)
{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"}
{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}
Не каждое отдельное поле отступ/на отдельной строке, а каждая запись на нем'собственные линии.
Некоторые образцы входных.
"John","Doe","001","Message1"
"George","Washington","002","Message2"
Проблема с ваш желаемый результат заключается в том, что он не является допустимым JSON-документ,; его'ы поток JSON-документы!
Что'ы хорошо, если его, что вам нужно, но это означает, что для каждого документа, который вы хотите в ваш выходной, вы'придется позвонить в JSON.отвалите`.
С новой строки необходимо отделять свои документы, не содержащиеся в этих документах, вы'вновь на крючке для подачи себя. Так что нам просто нужно вытянуть петлю из вызова в формате JSON.выкинуть и вставить новые строки для каждого письменного документа.
Вы можете использовать панд DataFrame для этого на следующем примере:
Я взял @SingleNegationElimination'ответ Ы и упрощенный его в трех-вкладыш, который может быть использован в трубопроводе:
Документация в формате JSON.дампы()
Вы можете попробовать это
Редактировать:
Простой подход
Добавить параметр
отступ
на `в JSON.отваловТакже обратите внимание, что вы можете просто использовать
в JSON.свалка
сjsonfile
:Как насчет использования панд, чтобы прочитать файл CSV в таблицу данных (ПД.read_csv), затем манипулируя столбцов, если вы хотите (опуская их или обновление значений) и, наконец, преобразование таблицы данных обратно в JSON (ПД.Таблицы данных.to_json).
Примечание: Я не'т проверили, насколько эффективно это будет, но это, безусловно, один из самых простых способов манипуляции и преобразования большого файла CSV в JSON.
Я вижу, что это старый, но мне нужен код от SingleNegationElimination однако у меня были проблемы с данными, содержащих UTF-8 символы. Они появились в полях я не был чрезмерно обеспокоен, поэтому я решила проигнорировать их. Однако это потребовало определенных усилий. Я новичок в Python, так что с некоторых проб и ошибок я получил его на работу. Код является копией SingleNegationElimination с дополнительной обработкой в UTF-8. Я пытался сделать это с https://docs.python.org/2.7/library/csv.html но в конце концов сдался. Приведенный ниже код работал.
Как незначительное улучшение к @MONTYHS ответа, перебора наконечником из поля: