UnicodeDecodeError: код 'ascii' c не может декодировать байт 0x80 в позиции 3131: порядковый номер не в диапазоне (128) - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь открыть несколько текстовых файлов из папки и один за другим, отформатировать их.

Мой код:

import json
import yaml
import os
import string

list_num = 0

def load_knowledge():
    if os.path.exists("knowledge"):
        with open("knowledge") as f:
            knowledge = json.load(f)
    else:
        knowledge = {}
    return knowledge

def write_knowledge(knowledge):
    with open("knowledge", "w") as f:
        json.dump(knowledge, f, indent=2, sort_keys=True)

for item in os.listdir("/Users/'My username'/Desktop/'The directory'/yml"):
    with open("/Users/'My username'/Desktop/'The directory'/yml/" + item) as f:
        data = yaml.safe_load(f)


    dataDirectory = {}

    dataDict = {}
    dataDict.update(data)

    knowledge = load_knowledge()
    tag = dataDict['categories'][0]

    for i in range(len(dataDict['conversations'])-1):
        if dataDict['conversations'][list_num][0] == dataDict['conversations'][list_num+1][0]:
            dataDict['conversations'][list_num][1] = (str(dataDict['conversations'][list_num][1]) + ';' + str(dataDict['conversations'][list_num+1][1]))
            del dataDict['conversations'][list_num+1]
            list_num = list_num - 1
        list_num = list_num + 1

    for list in dataDict['conversations']:
        user_input = list[0].lower().strip().translate(str.maketrans('', '', string.punctuation))
        response = list[1]

        if tag in knowledge:
            knowledge[tag][user_input] = response.split(';')
            write_knowledge(knowledge)
        else:
            knowledge[tag] = {}
            knowledge[tag][user_input] = response.split(';')
            write_knowledge(knowledge)
    print("Import successful!")

По какой-то причине я получаю сообщение об ошибке:

UnicodeDecodeError: код 'ascii' c не может декодировать байт 0x80 в позиции 3131: порядковый номер не в диапазоне (128)

Содержимое каталога: file1. json, file2. json, file3. json ... поэтому я получаю сообщение об ошибке, что файл не существует, даже если он известен.

Пример файла:

категории: - приветственные разговоры: - - привет - привет - - привет - привет - - привет! - Привет - - Привет - Привет! - - Привет, как дела? - Хорошо - - Привет, как дела? - Хорошо - - Привет, как дела? - Хорошо - - Привет, как дела? - Отлично - - Привет, как дела? - Могло быть лучше. - - Привет, как дела? - Не так здорово. - - Как дела? - Хорошо. - - Как дела? - Очень хорошо, спасибо. - - Как дела? - Нормально, а Вы? - - Приятно с Вами познакомиться. - Спасибо. - - Как дела? - У меня все хорошо. - - Как дела? - У меня все хорошо. Как ты? - - Привет! Рад встрече. - Спасибо. Ты тоже. - - Это удовольствие встретить тебя. - Спасибо. Ты тоже. - - Утро тебе! - Спасибо, любезно. - - Утро тебе! - И остаток дня тебе. - - Что происходит? - Немного. - - Что происходит? - Не очень много. - - Что происходит? - Не много, а ты? - - Что происходит? - Ничего особенного. - - Что происходит? - Небо поднялось, но я в порядке, спасибо. Как насчет вас?

Когда вы импортируете файл, он преобразуется в словарь:

{'category': ['greetings'], 'messages': [ ['Привет', 'Привет'], ['Привет', 'Привет'], ['Привет!', 'Привет'], ['Привет', 'Привет!'], ['Привет, Как дела? ? ',' Хорошо '], [' Привет, как дела? ',' Хорошо '], [' Привет, Как дела? ',' Хорошо '], [' Привет, Как дела? ' , «Отлично»], [«Привет, как дела?», «Может быть, лучше».], [«Привет, как дела?», «Не так здорово».], [«Как дела? ? ',' Хорошо. '], [' Как дела? ',' Очень хорошо, спасибо. '], [' Как дела? ',' Хорошо, а ты? '], [' Приятно познакомиться Вы. ',' Спасибо. '], [«Как дела?», «У меня все хорошо».], [«Как дела?», «У меня все хорошо. Как дела? «], [Привет, приятно познакомиться.», «Спасибо. Вы тоже. '], [' Приятно познакомиться. ',' Спасибо. Вы тоже. '], [' Утро тебе! "," Благодарю тебя. "], [" Утро тебе! "," И остаток дня тебе. "], [ «Что случилось?», «Не так много».], [«Что случилось?», «Не слишком много.»], [«Что случилось?», «Не так много, как у вас?»], [«Что случилось? ? "," Ничего особенного. '], ["Что случилось?", "Небо поднялось, но я в порядке, спасибо. А ты?"]]}

1 Ответ

2 голосов
/ 05 февраля 2020

Я думаю, это потому, что os.listdir возвращает имена файлов, а не путь к файлам. Вы можете сделать

for item in os.listdir(directory):
    with open(directory + item) as f:
        data = yaml.safe_load(f)

или использовать glob

import glob

for item in glob.glob(directory):
    with open(item) as f:
        data = yaml.safe_load(f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...