2017-05-08 117 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

相關問題