Python Pillow加载图片遇FileNotFoundError及Unicode错误求助
我刚接触Python和Pillow的时候也踩过这些坑,咱们一步步来解决你的问题:
首先看你遇到的核心错误:
Traceback (most recent call last): File "Desktop/Scripts/Pillow_Test/PILTest.py", line 3, in
trophy_img = Image.open('Trophy.jpg'); File "C:\Users\Tallen\AppData\Local\Programs\Python\Python37-32\lib\site-packages\PIL\Image.py", line 2652, in open fp = builtins.open(filename, "rb") FileNotFoundError: [Errno 2] No such file or directory: 'Trophy.jpg'
问题1:相对路径找不到图片
你以为图片和脚本在同一文件夹就没问题,但Python的当前工作目录(CWD)不一定是脚本所在的文件夹!比如你可能从命令行的其他目录运行脚本,或者IDE的默认工作目录不是脚本文件夹。
先验证一下:在你的代码开头加两行,看看当前工作目录是什么:
import os print(os.getcwd()) # 打印当前工作目录 from PIL import Image trophy_img = Image.open('Trophy.jpg') trophy_img.show()
如果打印出来的路径不是Desktop/Scripts/Pillow_Test,那就是这个问题了。
解决方法有两种:
方法一:手动切换工作目录到脚本所在路径
在代码开头加上:import os # 获取脚本所在的目录 script_dir = os.path.dirname(os.path.abspath(__file__)) # 切换到该目录 os.chdir(script_dir)之后再用相对路径加载图片就没问题了。
方法二:直接用脚本目录拼接图片路径(更推荐,不用切换目录)
代码改成:import os from PIL import Image script_dir = os.path.dirname(os.path.abspath(__file__)) # 拼接图片的完整路径 img_path = os.path.join(script_dir, 'Trophy.jpg') trophy_img = Image.open(img_path) trophy_img.show()这种方法不管你从哪里运行脚本,都能准确找到图片。
问题2:绝对路径的Unicode错误
你用C:\Users...这种路径时,Python会把\当成转义字符(比如\U会被解析为Unicode转义),所以会报错。解决这个问题有三种写法:
- 用原始字符串:在路径前加
r,告诉Python不要解析转义字符trophy_img = Image.open(r"C:\Users\Tallen\Desktop\Scripts\Pillow_Test\Trophy.jpg") - 用双反斜杠代替单反斜杠:
trophy_img = Image.open("C:\\Users\\Tallen\\Desktop\\Scripts\\Pillow_Test\\Trophy.jpg") - 用正斜杠(Python支持跨平台的路径写法):
trophy_img = Image.open("C:/Users/Tallen/Desktop/Scripts/Pillow_Test/Trophy.jpg")
额外注意点
- 确认图片文件名的大小写!Windows系统文件名不区分大小写,但有些IDE或命令行环境可能会敏感,比如你代码里写的是
Trophy.jpg,但实际文件名是trophy.jpg或者Trophy.JPG,也会找不到。 - 检查图片有没有被其他程序锁定,或者文件名里有没有隐藏的空格/特殊字符。
内容的提问来源于stack exchange,提问作者Tallen Smith

