我有一个以
的方式递归通过某些文件夹的代码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 :(得分:0)
该文件显然不是UTF-8编码的。如果它具有指定UTF-8(或未指定编码)的XML声明,则需要替换它。如果没有XML声明,您应该尝试添加一个。
正确的XML声明需要指定实际的字符集,可能是<?xml version="1.0" encoding="iso-8859-1" ?>
,或者可能是其他一些ISO编码。