Python PIL从特定文件打开图像
我开始学习Python中的枕头库。我有一个存储代码的文件夹1,在该文件夹中还有另一个文件夹2,我想编辑/处理的所有图片都在该文件夹中 但是,我只能在图像保存在文件夹1中时访问这些图像,而不能在图像仅保存在文件夹2中时访问这些图像 我使用了以下代码:Python PIL从特定文件打开图像,python,operating-system,anaconda,python-imaging-library,Python,Operating System,Anaconda,Python Imaging Library,我开始学习Python中的枕头库。我有一个存储代码的文件夹1,在该文件夹中还有另一个文件夹2,我想编辑/处理的所有图片都在该文件夹中 但是,我只能在图像保存在文件夹1中时访问这些图像,而不能在图像仅保存在文件夹2中时访问这些图像 我使用了以下代码: from PIL import Image import os for k in os.listdir('.'): if k.endswith('.jpg'): i = Image.open(k) kn, k
from PIL import Image
import os
for k in os.listdir('.'):
if k.endswith('.jpg'):
i = Image.open(k)
kn, kext = os.path.splitext(k)
print(kn)
它打印所有文件名的名称减去扩展名“.jpg”:
MeisJeMetDeParel
StarryNight
TheSonOfMan
然后我也尝试了同样的方法,只从他们自己的特定文件夹中访问图像:
for k in os.listdir('testPictures'):
if k.endswith('.jpg'):
i = Image.open(k)
kn, kext = os.path.splitext(k)
print(kn)
通过将目录更改为文件夹名称,它们将存储在testPictures中。但是,我得到了一个错误:
FileNotFoundError: [Errno 2] No such file or directory: 'MeisJeMetDeParel.jpg'
因此,文件夹中的图像似乎正在被访问,因为它能够识别文件夹中第一个图像的名称,但代码无法打印图像的名称,因为当代码和图像一起保存时,它能够打印图像的名称。我可以对代码进行哪些调整,以便打印testPictures文件夹中的图片?
感谢os.listdir函数返回一个相对于指定目录的路径,因此您必须使用os.path.join将目录连接到您获得的名称:
for k in os.listdir('testPictures'):
if k.endswith('.jpg'):
i = Image.open(os.path.join('testPictures', k))
kn, kext = os.path.splitext(k)
print(kn)
我可能建议您不必调用os.listdir并手动检查扩展名,而可以使用glob模块,还可以避免使用os.path.join目录名:
import glob
for k in glob.glob('testPictures/*.jpg'):
i = Image.open(k)
kn, kext = os.path.splitext(k)
print(kn)
这段代码是在Linux、macOS还是Windows上运行的?Windows 10 64位Hi,这似乎可以解决问题,谢谢。还有一些事情:我想知道testPictures/*.jpg中的*在做什么?在从数组中打印项目时,我使用*删除方括号和引号。另一件事是,图像名称在每个名称之前都会打印“testPictures”,例如“testPictures\StarryNight”。我怎样才能只显示文件名?ThanksUpdate将printkn更改为printkn[13:],这样就不会显示每个文件名之前的“TestPictures\”。这是可以接受的还是有更好的方法?Thanks@tewi*是一个通配符。glob'testPictures/*.jpg'将查找testPictures下以jpg结尾的所有文件。这个*基本上意味着什么。查看更多信息information@tewi您还可以使用os.basename从路径中删除目录。所以os.basename/usr/local/bin/something.sh==something.sh,或者,如果您在windows下,os.basenameC://directory/file.bat==file.bat.Great,非常有用。谢谢您: