Скрипт конвертации JSON в CSV в Python

Доброго времени суток! Сегодня мы рассмотрим с Вами возможный пример реализации скрипта, который будет конвертировать переданный JSON файл в CSV формат.
Скрипт:
import json
import csv
import sys
import argparse
from jsonpath_ng import jsonpath
from jsonpath_ng.ext import parse
def extract_data_from_json(json_data, json_path):
# Парсинг JSON-пути
jsonpath_expr = parse(json_path)
# Извлечение данных
matches = jsonpath_expr.find(json_data)
if matches:
return matches[0].value
else:
raise ValueError(f"Нет данных по указанному JSON пути: {json_path}")
def json_to_csv(json_file_path, csv_file_path, json_path):
# Загрузка JSON-данных из файла
with open(json_file_path, 'r', encoding='utf-8') as json_file:
data = json.load(json_file)
# Извлечение данных по указанному пути
extracted_data = extract_data_from_json(data, json_path)
# Определение заголовков CSV на основе ключей первого объекта
headers = extracted_data[0].keys()
# Запись данных в CSV-файл
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csv_file:
writer = csv.DictWriter(csv_file, fieldnames=headers)
writer.writeheader() # Запись заголовков
writer.writerows(extracted_data) # Запись строк данных
def main():
# Настройка парсера аргументов командной строки
parser = argparse.ArgumentParser(description='Конвертация JSON файла в CSV с использованием указанного JSON пути.')
parser.add_argument('json_file', help='Путь к входному JSON файлу')
parser.add_argument('csv_file', help='Путь к выходному CSV файлу')
parser.add_argument('json_path', help='JSON путь для извлечения данных, например, "response.data"')
# Парсинг аргументов командной строки
args = parser.parse_args()
# Преобразование JSON в CSV
try:
json_to_csv(args.json_file, args.csv_file, args.json_path)
print(f'Данные успешно преобразованы из {args.json_file} в {args.csv_file}')
except ValueError as e:
print(f'Ошибка: {e}')
if __name__ == '__main__':
main()
-
-
Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.