![](/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.