Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python UnicodeDecodeError或不可加密的结果_Python - Fatal编程技术网

Python UnicodeDecodeError或不可加密的结果

Python UnicodeDecodeError或不可加密的结果,python,Python,我已经接管了大学的一个项目,正在着手处理现有的代码库。我遇到了一个错误,正如在标题中,当我试图运行代码时,我得到了一个UnicodeDecodeError。本质上,该软件解析引用文档,然后导出和分析它们,将它们存储在JSON中,并根据关键字将它们分类为学术或非学术 我(多少?)研究过这个问题,在with open()调用中添加“encoding=''”可以解决这个问题,但只能使用utf-8以外的编解码器,如latin1。在这个with open()调用中添加“errors='ignore'”也可

我已经接管了大学的一个项目,正在着手处理现有的代码库。我遇到了一个错误,正如在标题中,当我试图运行代码时,我得到了一个UnicodeDecodeError。本质上,该软件解析引用文档,然后导出和分析它们,将它们存储在JSON中,并根据关键字将它们分类为学术或非学术

我(多少?)研究过这个问题,在with open()调用中添加“encoding=''”可以解决这个问题,但只能使用utf-8以外的编解码器,如latin1。在这个with open()调用中添加“errors='ignore'”也可以修复它。基于其他代码行,我确信使用的编解码器是utf-8。我被难住了,为什么我会遇到这个问题,并且不太确定从哪里开始修复它(首先,我自己没有编写代码,其次,我是Python新手,在这个项目中自学了它)

我以前遇到的错误是:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python\Python38\lib\tkinter\__init__.py", line 1883, in __call__
    return self.func(*args)
  File "C:/path/GUIFrontend.py", line 50, in filepath_submitted
    results = return_dict_of_results(filepath)
  File "C:/path/GUIFrontend.py", line 131, in return_dict_of_results
    results_array = loader_text.return_citation_array()
  File "C:\path\DataLoaders\CitationLoaderTxt.py", line 23, in return_citation_array
    for string in self.__nonblank_lines__(file):
  File "C:\path\DataLoaders\CitationLoaderTxt.py", line 65, in __nonblank_lines__
    for l in file:
  File "C:\Python\Python38\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x9c in position 72: invalid start byte
当我让代码运行时,我遇到的问题是无法解释的结果,比如下面,当我使用上面的任何一种方法来实际运行代码时

{"C:/Users/myname/Downloads/paper-8641.pdf": [{"__class__": "CitationObj", "__module__": "Citations.CitationObj", "title": "\u2020\u2021L\u017e|}\u00fa\u0002Ii8\u203arJUb\u00a3\u001b7\u00fa\u0006\u00a2\u203a\u2021\u203a\u00e8\u00e6\u00db7\u00ef\u00ee\u00de|\u00f1\u00be\u00cco\u0160\u00b0\u00cc\u00b2\u00e4\u00e6\u00ee\u00fe&\u00ceu\u00a8\u00b3\u00fc&/\u00f30/\u00d2\u203a\u00bb\u00e3\u00cd?\u0192\u00f7\u00b7E\u0014\u201e\u00b7{\u2022F\u00c1\u00f7\u00d5`;\u0006\u00ab\u00ee\u00c8\u00c0\u00d7B\u00fb0\u00ce\u00b4\u00b7\u00ff\u00ba\u00fb\u00e3M\u2018\u2021I\u2019\u00dcDa\u201dH'?\u00ab,!\u00d2>", "author": [], "journal": "", "id": "C:/Users/myname/Downloads/paper-8641.pdf", "classification": "Academic"} 
以下是错误产生的脚本:

#Loader专用于加载文本文件并将信息提取到给定的引用对象中
导入json
进口稀土
从数据加载器导入引文加载器数据库
从引文。引文对象导入引文对象
类引文加载器文本(引文加载器基.引文加载器基):
#路径:要从中提取引文的文本文件的路径
#AnalyzedFiles:包含已分析文件信息的数组
定义初始化(自身,路径):
self.regex=“\d*(.*)\”(.*)\”(.*)\d*(.*)”
self.path=path
self.analyzedFiles=[]
#从实例变量加载文件并在文件中运行,返回所有
#匹配作为数组实例变量提供的正则表达式
def返回\引用\数组(自):
如果self.\uuu已\u读取文件\uuuu():
打印(“在“+self.path+”文件中查找与“+self.regex+”的匹配项以作为数组返回”)
引文列表=[]
打开(self.path,'r',encoding='utf-8')作为文件:
对于self.\uuuu非空行\uuuuu(文件)中的字符串:
匹配=重新搜索(self.regex,字符串)
如果匹配组(1)为无:
引文列表。附加(引文对象(匹配组(4),[],“”和self.path))
其他:
作者列表=[匹配组(1)]
引用列表.append(引文对象(match.group(2)、作者列表、match.group(3)、self.path))
self.analyzedFiles.append(self.path)
返回引用列表
其他:
打印(“文件已分析”)
def return_引文_字典(self):
如果self.\uuu已\u读取文件\uuuu():
打印(“在“+self.path+”文件中查找与“+self.regex+”的匹配项以作为字典返回”)
引文列表=[]
打开(self.path,'r',encoding='utf-8')作为文件:
对于self.\uuuu非空行\uuuuu(文件)中的字符串:
匹配=重新搜索(self.regex,字符串)
如果匹配组(1)为无:
引文列表。附加(引文对象(匹配组(4),[],“”和self.path))
self.analyzedFiles.append(self.path)
其他:
作者列表=[匹配组(1)]
引用列表.append(引文对象(match.group(2)、作者列表、match.group(3)、self.path))
self.analyzedFiles.append(self.path)
引文目录={“引文”:引文列表}
self.analyzedFiles.append(self.path)
返回引文目录
其他:
打印(“文件已分析”)
def更改文件(自身、新文件路径):
self.path=新文件路径
#从analyzedFiles列表中清除已分析的文件
def clear_分析_文件(自身):
self.analyzedFiles=[]
#从输入文件中删除所有空行,以帮助保留顺序
定义非空行(自身,文件):
对于文件中的l:
line=l.rstrip()
如果行:
生产线
#确定文件是否已被分析,并返回一个布尔值
定义文件已被读取(自):
如果len(自分析文件)>0:
对于self.analyzedFile中的文件:
如果self.path==文件:
返回错误
返回真值
#PDF文件加载器,从学术论文文本中提取信息,
#但是,由于为用户输入添加了一个附加参数,是否违反了liskov替换原则
从引文。引文对象导入引文对象
从DataLoaders.引文加载器数据库导入引文加载器数据库
进口稀土
导入文本摘要
导入json
类引文加载程序DF(引文加载程序库):
#filePath:要从中提取引文的PDF文件的路径
#regexPath:用于定义正则表达式的用户定义文件的路径
#AnalyzedFiles:包含已分析文件信息的数组
定义初始化(self、filepath、regexpath):
self.filePath=filePath
self.regexPath=regexPath
self.analyzedFiles=[]
def返回\引用\数组(自):
如果self.\uuu已\u读取文件\uuuu():
引用对象列表=[]
pdf\u text=self.\uuuu get\u pdf\u text\uuuuuu()
引文\正则表达式=self.\获取\引文\正则表达式\()
引文\数据=re.findall(引文\正则表达式,pdf \文本)
对于引文数据中的引文:
列出引文对象的列表。追加(引文对象(引文[1],引文[0],引文[2],self.filePath))
self.analyzedFiles.append(self.filePath)
引文返回列表