Вывод CSV в JSON только в том случае, если все значения присутствуют в CSV

#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)