在 Python 中,處理檔案路徑時,反斜槓 \
是一個特殊的字元,它常用於轉義序列(例如 \n
代表換行符號)。
因此,如果你直接在字串中使用反斜槓,可能會產生轉義字元的誤解。為了避免路徑中的反斜槓 \
需要轉義的問題,這種情況下會導致路徑解析錯誤。
先試著用VScode,右鍵點擊複製路徑
直接用這路徑來讀圖看看
D:\python\crab\d\111.jpg

程式範例
直接用複製的路徑,python會把\
當作轉義符號,就無法正常讀取圖片。
import cv2
file_path = 'D:\python\crab\d\111.jpg'
img = cv2.imread(file_path)
if img:
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
else:
print('未讀取到圖片')

可以使用以下幾種方法來輕鬆處理 路徑的問題:
1. 使用 原始字符串 r''
你可以直接使用原始字符串的方式來避免反斜槓轉義問題,這樣每個反斜槓會被視為普通字符,不需要手動進行轉換:
import cv2
file_path = r'D:\python\crab\d\111.jpg'
img = cv2.imread(file_path)
if img is None:
print('未讀取到圖片')
else:
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
這樣就能正常地讀取到圖片了

2. 使用 pathlib
Python 的pathlib
提供了更方便、跨平台的處理路徑的方法,這樣你就不必手動調整 \
或 /
,這些方法會自動根據你的操作系統格式化路徑。
使用 pathlib
:
pathlib
是更現代化的路徑處理工具,特別適合跨平台的應用,可以自動管理路徑分隔符號。
from pathlib import Path
import cv2
# 使用 pathlib 處理路徑
file_path = Path("D:/python/crab/d/111.jpg")
# 讀取圖片
image = cv2.imread(file_path)
if image is None:
print('未讀取到圖片')
else:
print('有讀取到圖片')

這樣,你就可以不再擔心路徑分隔符號的轉換問題,pathlib
會自動根據操作系統處理路徑。Windows 上仍然會使用反斜槓顯示,但不需要手動轉換。
3. 使用 雙斜槓 \\
如果你堅持使用普通字符串,也可以用雙斜槓 \\
來表示路徑中的反斜槓,這樣可以避免反斜槓的轉義問題,但不建議因為不美觀,也會有隱藏的問題存在
import cv2
# 使用 pathlib 處理路徑
file_path = "D://python//crab//d//111.jpg"
# 讀取圖片
image = cv2.imread(file_path)
if image is None:
print('未讀取到圖片')
else:
print('有讀取到圖片')
使用 雙斜槓 \\
隱藏問題或不便:
- 跨平台兼容性:
- 使用雙斜槓適用於 Windows,但如果你的代碼需要在 Linux 或 macOS 上運行,它們使用的是正斜槓 / 作為路徑分隔符號。儘管 Python 自動處理 Windows 和 Linux 之間的路徑分隔符(反斜槓和正斜槓),但在多個系統中混合使用雙斜槓和正斜槓可能會讓代碼變得不易讀、難以維護。
- 代碼可讀性降低:
例如:path = "D:\\python\\project\\data\\images\\test.jpg"
- 雙斜槓 \\ 在路徑中看起來比較冗長,尤其是在長路徑中。這會降低代碼的可讀性,讓人難以快速理解這段代碼,特別是在路徑中有許多文件夾時。
- 易出錯:
- 如果忘記了某處應該使用雙斜槓,可能會導致難以追蹤的錯誤。例如,單斜槓 \n 是換行符,\t 是製表符,這樣的情況可能會導致路徑解析錯誤,或者出現奇怪的轉義行為。
- 不符合現代化編程風格:
- 在 Python 3.4 引入 pathlib 之後,處理路徑的現代化方法(如 pathlib.Path)更推薦,這樣能自動處理跨平台的路徑問題,讓代碼更加一致並且容易維護。
建議的替代方案:
最方便的方法是使用 pathlib
或 原始字符串 r''
,這樣不僅解決了路徑分隔符號的問題,還能讓你的代碼更加跨平台和易讀。