1. 程式人生 > 其它 >Python 用OPEN讀檔案報錯 ,路徑以及r

Python 用OPEN讀檔案報錯 ,路徑以及r

Python 中 ‘unicodeescape’ codec can’t decode bytes in position XXX: trun錯誤解決方案

背景描述

今天在運用Python pillow模組處理圖片時遇到一個錯誤

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated UXXXXXXXX escape

剛開始以為是圖片名字有中文,不識別,於是在python檔案的頭部加上

#-*- coding:utf-8 -*-

但是加完這個還是報錯,然後我就把圖片的中文去掉還成英文,然後報錯,一臉懵逼呀。後來在stackoverflow 上找到了類似的錯誤,原來是圖片路徑寫的 有問題,錯誤程式碼如下

im = Image.open('C:UsersFrankYuanPicturesCamera RollWIN_20161010_08_51_57_Pro.jpg')

正確結果

im = Image.open('C:\Users\FrankYuan\Pictures\Camera Roll\WIN_20161010_08_51_57_Pro.jpg')

或者

im = Image.open(r'C:UsersFrankYuanPicturesCamera RollWIN_20161010_08_51_57_Pro.jpg')

抑或

im = Image.open(r'C:/Users/FrankYuan/Pictures/Camera Roll/WIN_20161010_08_51_57_Pro.jpg')

原因:

window 讀取檔案可以用,但是在字串中是被當作轉義字元來使用,所以’d:a.txt’會被轉義成’d:a.txt’這是正確路徑,所以不會報錯。而‘C:UsersFrankYuanPicturesCamera RollWIN_20161010_08_51_57_Pro.jpg ’中經過轉義之後可能就找不到路徑的資源了,例如t可能就轉義成tab鍵了。

解決辦法

python在描述路徑時可以有多種方式,現列舉常見的三種

方式一:轉義的方式

'd:\a.txt'

方式二:顯式宣告字串不用轉義

'd:ra.txt'

方式三:使用Linux的路徑/

'd:/a.txt'

我強烈推薦第三種寫法,這在Linux

和window下都是行的通的。