2017-05-08 67 views
-2

我有去递归通过一些文件夹,在的UnicodeDecodeError“UTF-8”编解码器不能解码字节0XB0

for root, subFolders, files in os.walk(str(rootdir)): 

的方式运行程序我找到错误UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 37: invalid start byte代码。

已更改rootdir的方向,以查看错误何时开始,并且发现路径中的一些文件夹,我实际上想要使用它们,这些文件夹完全正常,有些返回错误,但是所有子目录都只有文件夹或者基本上具有相同的文件,所以我不知道错误来自何处或如何解决。

请帮忙。

错误出现在我使用外部软件包的行中,但软件包导入正常,代码正常,并且它在未出现unicode错误时有效。行代码在文件夹中导入.xml文件,该文件是否存在问题? (不应该,因为它们都是用相同的程序创建的,如果有错误,那么所有的都应该是错的,而不是少数)

编辑:要真正测试我的代码,你必须安装pymatgen(你可以用pip)并获得一个vasprun.xml文件。非常难以想象,因此我为什么没有把它放在开头。

代码(与所述误差最后一行)

from pymatgen.electronic_structure.dos import CompleteDos, add_densities, Dos 
from pymatgen.electronic_structure.core import Spin, Orbital 
from pymatgen.io.vasp.outputs import Vasprun, Procar 
vasprun = Vasprun(root+"/vasprun.xml") 

错误:

Traceback (most recent call last): 
    File "an.py", line 196, in <module> 
vasprun = Vasprun(root+"/vasprun.xml") 
    File "/usr/lib64/python2.7/site-packages/pymatgen/io/vasp/outputs.py", line 383, in __init__ 
self.update_potcar_spec(parse_potcar_file) 
    File "/usr/lib64/python2.7/site-packages/pymatgen/io/vasp/outputs.py", line 829, in update_potcar_spec 
potcar = get_potcar_in_path(os.path.split(self.filename)[0]) 
    File "/usr/lib64/python2.7/site-packages/pymatgen/io/vasp/outputs.py", line 813, in get_potcar_in_path 
pc = Potcar.from_file(os.path.join(p, fn)) 
    File "/usr/lib64/python2.7/site-packages/pymatgen/io/vasp/inputs.py", line 1704, in from_file 
fdata = reader.read() 
    File "/usr/lib64/python2.7/codecs.py", line 314, in decode 
(result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 37: invalid start byte 
+0

请显示完整的错误信息和所有相关代码。 – DyZ

+0

看看[问]并编辑你的问题,添加诸如你的实际代码(或者最好是[MCVE])的东西,你得到的确切例外,你得到的线路等。 – pvg

+0

我把这个例子,但怀疑它会有帮助 –

回答

0

文件显然不是UTF-8编码。如果它有一个指定UTF-8(或不指定编码)的XML声明,则需要替换它。如果没有XML声明,您应该尝试添加一个。 一个正确的XML声明将需要指定实际的字符集,可能是<?xml version="1.0" encoding="iso-8859-1" ?>,或可能是其他一些ISO编码。

+0

它说'<?XML版本= “1.0” 编码= “ISO-8859-1”?>',可以通过我刚更换编码线改变econding为UTF-8? –

+0

试图改变它只是更换线和错误仍然出现。 –

+0

有些东西显然试图将文件解码为utf8。从我所看到的,它是“/usr/lib64/python2.7/site-packages/pymatgen/io/vasp/inputs.py”中使用的'reader'对象。 – cco

相关问题