Преобразовать текстовый файл в JSON в Python - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть текстовый файл (record.txt) со следующим содержимым:

12-34,Doe,John:Art101,98:History201,56
56-78,Smith,Bob,bobsmith@email.com:Calculus300,45:Economics214,78:ECE415,84

Поле электронной почты является необязательным, поэтому оно может быть включено или не включено для каждого человека.

Вот как должен выглядеть формат JSON:

[{
    "id": "12-34", "lastname": "Doe", "firstname": "John",
    "classes":[{
        "classname":"Art101", "grade":"98"},{
        "classname":"History201","grade":"56"}]
 },
 {
    "id": "56-78", "lastname": "Smith", "firstname": "Bob", 
    "email":"bobsmith@email.com,
    "classes":[{
        "classname":"Calculus300", "grade":"45"},{
        "classname":"Economics214","grade":"78"},
        "classname":"ECE415", "grade":"84"}]
 }]

Я новичок в Python и JSON, так что мне очень трудно разобраться, как преобразовать содержимое в такой способ, где электронная почта может быть необязательным полем и как сериализовать классы для каждого человека также. Я не смог преобразовать данные в JSON после нескольких попыток.

Буду очень признателен за любые предложения или советы по решению этой проблемы.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Получить строку и сначала разделить на :, а затем каждый элемент разделить на ,. Вы можете использовать len(), чтобы проверить, имеет ли первая часть 3 или 4 элемента - если 4, то есть электронная почта.

import json

text = '''12-34,Doe,John:Art101,98:History201,56
56-78,Smith,Bob,bobsmith@email.com:Calculus300,45:Economics214,78:ECE415,84'''

all_data = []

for line in text.split('\n'):
    line = line.strip()
    parts = line.split(':')

    data = parts[0].split(',')
    classes = parts[1:]

    item = {
        'id': data[0],
        'lastname': data[1],
        'firstname': data[2],
        'classes': [],
    }

    if len(data) > 3:
        item['email'] = data[3]

    for class_ in classes:
        name, grade = class_.split(',')
        item['classes'].append({'classname': name, 'grade': grade})

    all_data.append(item)

print(json.dumps(all_data, indent=2))

Результат:

[
  {
    "id": "12-34",
    "lastname": "Doe",
    "firstname": "John",
    "classes": [
      {
        "classname": "Art101",
        "grade": "98"
      },
      {
        "classname": "History201",
        "grade": "56"
      }
    ]
  },
  {
    "id": "56-78",
    "lastname": "Smith",
    "firstname": "Bob",
    "classes": [
      {
        "classname": "Calculus300",
        "grade": "45"
      },
      {
        "classname": "Economics214",
        "grade": "78"
      },
      {
        "classname": "ECE415",
        "grade": "84"
      }
    ],
    "email": "bobsmith@email.com"
  }
]
0 голосов
/ 28 февраля 2020

Я не уверен, как ты пытался. Прочитать каждую строку, разделить на основе двоеточия (:). Разделите 0-й индекс с помощью (,), если длина составляет 4 процесса для электронной почты. Остальное игнорируй.

Надеюсь, это понятно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...