Python Json создание словаря из текстового файла, выпуск файла печати - PullRequest
1 голос
/ 06 октября 2019

Мне удалось взять текстовый файл, прочитать каждую строку, создать словарь для каждой строки, обновить (добавить) каждую строку и сохранить файл json. Проблема в том, что при чтении файла JSON он не будет прочитан правильно. ошибка указывает на проблему сохранения файла?

Текстовый файл выглядит так:

84.txt;Франкенштейн или Современный Прометей;Мэри Уолстонкрафт (Годвин) Шелли 98.txt;Повесть о двух городах;Чарльз Диккенс ...

import json
import re

path = "C:\\...\\data\\"

books = {}
books_json = {}
final_book_json ={}

file = open(path + 'books\\set_of_books.txt', 'r') 
json_list = file.readlines()
open(path + 'books\\books_json.json', 'w').close() # used to clean each test

json_create = []
i = 0

for line in json_list:
    line = line.replace('#', '')
    line = line.replace('.txt','')
    line = line.replace('\n','')
    line = line.split(';', 4)
    BookNumber = line[0]
    BookTitle = line[1]
    AuthorName = line[-1]
file
    if BookNumber == ' 2701': 
        BookNumber = line[0]
        BookTitle1 = line[1]
        BookTitle2 = line[2]
        AuthorName = line[3]
        BookTitle = BookTitle1 + ';' + BookTitle2 # needed to combine title into one to fit dict format
    books = json.dumps( {'AuthorName': AuthorName,  'BookNumber': BookNumber, 'BookTitle': BookTitle})
    books_json = json.loads(books)
    final_book_json.update(books_json)
    with open(path + 'books\\books_json.json', 'a'
             ) as out_put:                 
        json.dump(books_json, out_put)

with open(path + 'books\\books_json.json', 'r'
         ) as out_put:
'books\\books_json.json', 'r')]
    print(json.load(out_put))  

Сообщенная ошибка: JSONDecodeError: Дополнительные данные: строка 1 столбец 133 (символ 132) - добавление это прямо между первым "} {",Не знаете, как должен выглядеть json в формате плоского файла? Выходной файл, видимый в редакторе, выглядит следующим образом: {"AuthorName": "Мэри Уолстонкрафт (Годвин) Шелли", "BookNumber": "84", "BookTitle": "Франкенштейн или Современный Прометей"} {"AuthorName": "Чарльз Диккенс", "BookNumber": "98", "BookTitle": "Повесть о двух городах"} ...

1 Ответ

0 голосов
/ 07 октября 2019

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

    books = pd.read_csv(path + 'books\\set_of_books.txt', sep='\t', names =('r','t', 'a') )
    #print(books.head(10))

    # Function to clean the 'raw(r)' inoput data 
    def clean_line(cell):
...
        return cell

    books['r'] = books['r'].apply(clean_line)
    books = books['r'].str.split(';', expand=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...