![](/img/trans.png)
[英]Converting all files (.jpg to .png) from a directory in Python
[英]Python: Converting all files in a folder to JPG, but only JPG and PNG should be considered
该代码将所有文件转换为.jpg,但它应该只为.png 和.jpg 执行此操作,而不是例如 for.gif。 那么如何忽略除 PNG 和 JPG 之外的其他文件?
import os, sys
from PIL import Image
size = 200, 200
root=os.getcwd()+"\\train"
dirlist = [ item for item in os.listdir(root) if os.path.isdir(os.path.join(root, item)) ]
print(dirlist)
for ordner in dirlist:
print(ordner)
dateipfad=root+"\\"+ordner
dateien = [ item for item in os.listdir(dateipfad)]
print(dateien)
for datei in dateien:
print(datei)
outfile = os.path.splitext(datei)[0] + "_resize.jpg"
try:
im = Image.open(dateipfad+"\\"+datei)
im = im.resize(size)
im.save(dateipfad+"\\"+outfile, "JPEG")
您可以向 select 添加额外的列表理解,仅包含dateien
列表中的 jpg 和 png 文件:
dateien = [ item for item in os.listdir(dateipfad)]
dateien = [ item for item in dateien if item[-3:] in ['jpg', 'png'] ]
您甚至可以将两个列表推导合并为一行:
dateien = [ item for item in os.listdir(dateipfad) if item[-3:] in ['jpg', 'png'] ]
您可以使用glob
库:
from glob import glob
files_list = [j for i in [glob('path/to/images/directory/'+e) for e in ['*jpg', '*png']] for j in i]
或者干脆使用:
files_list = [glob('path/to/images/directory/'+e) for e in ['*jpg', '*png']]
这将为您提供一个包含两个列表的列表。 一种用于 png 图像,一种用于 jpg 图像。
这应该可以解决问题。 我所做的只是向listdir
返回添加一个过滤器,它检查最后 4 个字符是否与列表中的扩展名之一相同。
dateien = [item for item in filter(lambda fn: fn[-4:].lower() in ['.png', '.jpg'], os.listdir(dateipfad))]
使用 getcwd() 可能并不总是给您所需的结果,因为您无法确定脚本将从何处运行。 可以进行测试,但也许考虑一下:
import os
import glob
ROOT = os.path.expanduser('~') # this will equate to the user's HOME directory regardless of where the script is located
BASEDIR = os.path.join(ROOT, 'train', '*.*') # for cross-platform portability
for file in [F for F in glob.glob(BASEDIR) if F.lower().endswith('jpg') or F.lower().endswith('png')]:
print(file) # process the file here
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.