簡體   English   中英

Python:將文件夾中的所有文件轉換為 JPG,但應僅考慮 JPG 和 PNG

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM