Unicode解码错误:'ascii'编解码器无法解码位置 3131 中的字节0x80:序号不在范围内(128)



>我正在尝试从一个文件夹中打开多个文本文件,然后一个接一个地格式化它们。

我的代码:

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"编解码器无法解码位置 3131 中的字节0x80:序号不在范围内(128(

目录的内容是,file1.json,file2.json,file3.json ... 所以我收到一个错误,指出该文件不存在,即使知道它存在。

文件示例:

类别: -问候 对话: --你好 -你好 --你好 -你好 --问候! -你好 --你好 -问候! - - 嗨,进展如何? -好 - - 嗨,进展如何? -好 - - 嗨,进展如何? -好 - - 嗨,进展如何? -伟大 - - 嗨,进展如何? - 可以更好。 - - 嗨,进展如何? - 不是很好。 --你好吗? -好。 --你好吗? - 很好,谢谢。 --你好吗? - 很好,你呢? --见到你很高兴。 -谢谢。 --你好? - 我做得很好。 --你好? - 我做得很好。你好吗? - - 嗨,很高兴认识你。 -谢谢。你也是。 - - 很高兴认识你。 -谢谢。你也是。 - - 早上给你! - 谢谢你。 - - 早上给你! - 剩下的时间给你。 --怎么了? -不多。 --怎么了? - 不要太多。 --怎么了? - 不多,你呢? --怎么了? -很少。 --怎么了? - 天已经升起来了,但我很好,谢谢。你呢?

导入文件时,它会转换为字典:

{'类别': ["问候"], "对话": [["你好", "嗨"], ["嗨", "你好"], ["问候!", "你好", "问候!"], ["嗨,进展如何?", "好"], ["嗨,进展如何?", "好的"], ["嗨,进展如何?", "好"], ["嗨,进展如何?",["嗨,进展如何?", "可以更好。 ["你好吗?","很好,谢谢"],["你好吗?","很好,你呢?"],["很高兴认识你.","谢谢你"],["你怎么做?","我做得很好",["你怎么做?","我做得很好。你好吗?"],["嗨,很高兴认识你。你也是。你也是],["早上的顶端给你!","谢谢你",["早上的顶端给你!","剩下的时间给你。你呢?"]]}

我认为这是因为os.listdir返回了文件的名称,而不是文件的路径。你可以做

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

或使用全球

import glob
for item in glob.glob(directory):
with open(item) as f:
data = yaml.safe_load(f)

相关内容

最新更新