Конвертер из .csv в .json без использования модуля csv

Наги

Пользователь
Пользователь
Окт 25, 2020
75
5
8
Всем добрый день!
Было такое задание - сделать конвертер из .csv в .json без использования модуля csv в формате списка словарей. И был дан исходный файл - input.csv. Я все сделала, ответ сходится, но! Сделала я это криво и с привязкой к числу строк в исходном файле. Собственно, мне бы хотелось получить помощь на тему того, как изменить код, чтоб он был без привязки к числу строк. То есть, чтоб не надо было плодить кучу словарей и if-ов в коде, как у меня сейчас.
Вот мой код:
Python:
import json

INPUT_FILE = "input.csv"


def csv_to_list_dict(filename, delimiter=',', new_line='\n'):
    with open(filename) as f:
        dict1 = {}
        dict2 = {}
        dict3 = {}
        dict4 = {}
        heads = []
        res = [dict1, dict2, dict3, dict4]
        for index, line in enumerate(f):
            if index == 0:
                l_str = line.strip(new_line)
                l_spl = l_str.split(delimiter)
                for word in l_spl:
                    heads.append(word)
            else:
                l_str = line.strip(new_line)
                l_spl = l_str.split(delimiter)
                for i, j in enumerate(heads):
                    if index == 1:
                        dict1[heads[i]] = l_spl[i]
                    elif index == 2:
                        dict2[heads[i]] = l_spl[i]
                    elif index == 3:
                        dict3[heads[i]] = l_spl[i]
                    elif index == 4:
                        dict4[heads[i]] = l_spl[i]
    return res


print(json.dumps(csv_to_list_dict(INPUT_FILE), indent=4))

input.csv прилагаю и заранее благодарю за помощь!
 

Вложения

  • input.zip
    315 байт · Просмотры: 4
Последнее редактирование модератором:

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
933
208
43
20
Москва
Python:
import json
INPUT_FILE = "input.csv"

def csv_to_list_dict(filename, delimiter=',', new_line='\n'):
    with open(filename) as f:
        table = []
        for index, line in enumerate(f):
            # Получаем поля из строки
            fields = line.strip(new_line).split(delimiter)
            # Если мы на первой строке, сохраняем поля как заголовки
            if index == 0:
                heads = fields
                continue
            
            # Добавляем новый словарь в таблицу
            table.append({})
            
            for i, _ in enumerate(heads):
                # Берем последний элемент таблицы (добавленный словарь)
                # Добавляем в него нужный элемент
                table[-1][heads[i]] = fields[i]
    return table

print(json.dumps(csv_to_list_dict(INPUT_FILE), indent=4))
 
  • Мне нравится
Реакции: Наги

Наги

Пользователь
Пользователь
Окт 25, 2020
75
5
8
Python:
import json
INPUT_FILE = "input.csv"

def csv_to_list_dict(filename, delimiter=',', new_line='\n'):
    with open(filename) as f:
        table = []
        for index, line in enumerate(f):
            # Получаем поля из строки
            fields = line.strip(new_line).split(delimiter)
            # Если мы на первой строке, сохраняем поля как заголовки
            if index == 0:
                heads = fields
                continue
           
            # Добавляем новый словарь в таблицу
            table.append({})
           
            for i, _ in enumerate(heads):
                # Берем последний элемент таблицы (добавленный словарь)
                # Добавляем в него нужный элемент
                table[-1][heads[i]] = fields[i]
    return table

print(json.dumps(csv_to_list_dict(INPUT_FILE), indent=4))
Спасибо огромное!! Именно то, что я и хотела получить ^^
 
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов