如何用python遍历一个文件夹中的所有图片,并且文件夹中的图片还会不断增加,并且不重复遍历。设图片序号为1.jpg,2.jpg,3.jpg,以此类推,并不断增加
可以使用 Python 中的 os 和 PIL 库来遍历一个文件夹中的所有图片。其中,os 用于遍历文件夹中的所有文件名,PIL 则可以判断一个文件是否为图片格式。
以下是代码示例:
import os
from PIL import Image
def read_images(folder):
images = []
for fn in os.listdir(folder):
if fn.endswith('.jpg'): # 只处理 jpg 格式的文件
f = os.path.join(folder, fn) # 获取文件路径
if os.path.isfile(f): # 确定该路径对应的文件是一个普通文件而不是目录
try:
with Image.open(f) as img:
images.append(f)
except IOError:
pass
return images
以上代码定义了一个 read_images 函数,传入一个文件夹路径 folder,该函数会返回该文件夹下的所有 jpg 图片的路径 images。在内部,首先使用 os.listdir(folder) 获取该文件夹下的所有文件名,然后对于每一个以 .jpg 结尾的文件名,构造出该文件的完整路径,并判断它是一个普通文件而不是目录,进而使用 PIL.Image.open 函数打开该文件并返回其路径。
接下来,如果需要检查新加入的图片是否已经被遍历过,可以将已经遍历过的图片的路径存储到一个列表或者文件中,再次遍历文件夹时先将该数据结构加载到内存中,遍历时判断当前文件的路径是否在列表或者文件中,如果不在则说明该文件是新加入的图片,可以进行处理。
参考:https://blog.csdn.net/jerson_al/article/details/84061503
# -*- coding:utf-8 -*-
import os
import shutil
import cv2
def ismkdir(path_):
if not os.path.exists(path_):
os.makedirs(path_)
def searchDirFile(rootDir,saveDir):
for dir_or_file in os.listdir(rootDir):
filePath = os.path.join(rootDir, dir_or_file)
if os.path.isfile(filePath):
if os.path.basename(dir_or_file).endswith('.jpg'):
print('imgBox fileName is '+ os.path.basename(filePath))
img = cv2.imread(filePath)
if(img.shape):
shutil.copyfile(filePath,os.path.join(saveDir,os.path.basename(filePath)))
else:
print 'img文件不可读'
continue
else:
continue
elif os.path.isdir(filePath):
searchDirFile(filePath,saveDir)
else:
print('not file and dir '+os.path.basename(filePath))
rootDir = './light'
saveDir = './save'
ismkdir(rootDir)
ismkdir(saveDir)
searchDirFile(rootDir,saveDir)
可以使用Python的os模块和glob模块来遍历文件夹中的所有图片。具体步骤如下:
import os
import glob
def traverse_folder(folder_path):
# 获取文件夹中所有的图片文件
image_files = glob.glob(os.path.join(folder_path, '*.jpg'))
# 对文件进行排序
image_files.sort()
# 遍历文件
for image_file in image_files:
# 处理每个文件的代码
print(image_file)
folder_path = '/path/to/folder'
traverse_folder(folder_path)
folder_path = '/path/to/folder'
while True:
traverse_folder(folder_path)
# 每隔一段时间再次遍历文件夹
time.sleep(10) # 单位为秒,可以根据实际情况调整
这样就可以实现遍历文件夹中所有图片,并且不断遍历新增的图片。注意要对文件进行排序,以保证遍历顺序正确。