#python #json #pandas #dataframe #csv
#python #json #pandas #фрейм данных #csv
Вопрос:
У меня есть объединенный CSV-файл, который я пытаюсь вывести в формат JSON. Как мне реализовать логику, согласно которой файл CSV преобразуется только в объект JSON, все поля которого имеют значение?
import glob , os
import pandas as pd
import json
import csv
with open('some.csv', 'r', newline='') as csvfile,
open('output.json', 'w') as jsonfile:
for row in csv.DictReader(csvfile):
restructured = {
'STATION_CODE': row['STORE_CODE'],
'id': row['ARTICLE_ID'],
'name': row['ITEM_NAME'],
'data':
{
# fieldname: value for (fieldname, value) in row.items()
'STORE_CODE': row['STORE_CODE'],
'ARTICLE_ID': row['ARTICLE_ID'],
'ITEM_NAME': row['ITEM_NAME'],
'BARCODE': row['BARCODE'],
'SALE_PRICE': row['SALE_PRICE'],
'LIST_PRICE': row['LIST_PRICE'],
'UNIT_PRICE': row['UNIT_PRICE'],
}
}
json.dump(restructured, jsonfile, indent=4)
jsonfile.write('n')
В настоящее время это приведет к передаче всех значений из файла CSV в вывод JSON, что является непреднамеренным поведением. Есть какие-либо данные о том, как это исправить?
Комментарии:
1. Для ясности, если
CSV
файлempty value
включенany row
; Файл JSON долженnot be outputted at all
ИЛИ еслиCSV
строка имеет какое-либо пустое значение;only those rows
не должно бытьoutputted to the JSON file
?2. @ChathurangaK если строка CSV имеет пустое значение, только эти строки не должны выводиться в файл JSON. Спасибо за разъяснение!
Ответ №1:
Сначала я перебираю все элементы CSV
и добавляю их в a JSON array
. Если какой-либо элемент строки value is empty
, эта строка будет ignored
. Как только у меня будут все строки в JSON array
, я выведу их в JSON
файл
import json
import csv
csvjsonarr = []
with open('some.csv', 'r', newline='') as csvfile :
for row in csv.DictReader(csvfile):
hasemptyvalues = False
for rowidx in row :
if row[rowidx] == "" :
hasemptyvalues = True
break
if hasemptyvalues == True :
continue
restructured = {
'STATION_CODE': row['STORE_CODE'],
'id': row['ARTICLE_ID'],
'name': row['ITEM_NAME'],
'data': {
'STORE_CODE': row['STORE_CODE'],
'ARTICLE_ID': row['ARTICLE_ID'],
'ITEM_NAME': row['ITEM_NAME'],
'BARCODE': row['BARCODE'],
'SALE_PRICE': row['SALE_PRICE'],
'LIST_PRICE': row['LIST_PRICE'],
'UNIT_PRICE': row['UNIT_PRICE'],
}
}
csvjsonarr.append(restructured)
if len(csvjsonarr) > 0 :
with open('output.json', 'w') as jsonfile :
json.dump(csvjsonarr, jsonfile, indent=4)