OpenCV-Python——复制文件夹,批量操作多文件夹图片

目录

 创建一个新文件夹

复制文件夹以及文件夹下文件和目录文件

批量操作多文件夹图


import cv2 as cv
import os
import imghdr
import shutil

"""创建一个新文件夹"""
def CreateDir(path):
    if not os.path.exists(path):# 如果不存在则创建目录
        os.makedirs(path)
        print(path+' 目录创建成功')
    else: # 如果目录存在则不创建,并提示目录已存在
        print(path+' 目录已存在')

"""复制多个目录的文件或文件夹"""
def CopyFile(filepath, newPath):
	fileNames = os.listdir(filepath) # 获取当前路径下的文件名,返回List
	print(fileNames)
	for file in fileNames:
		Dir = os.path.join(filepath,file)# 将文件名加入到当前文件路径后面
        # 如果是文件
		if os.path.isfile(Dir):
			newFile = os.path.join(newPath,file)
			print(newFile)
			shutil.copyfile(Dir, newFile)
        #如果不是文件,递归这个文件夹的路径
		else:
			newDir = os.path.join(newPath,file)
			CreateDir(newDir)
			print(newDir)
			CopyFile(Dir,newDir)

"""批量处理文件后覆盖原文件"""
def Batch_img(dir_path):
	if os.path.exists(dir_path):
		imgType_list = {'jpg', 'bmp', 'png', 'jpeg', 'rgb', 'tif'}
		for parent,dirnames,filenames in os.walk(dir_path):    # 三个参数:分别返回1.父目录 2.所有文件夹名字(不含路径) 3.所有文件名字
			for filename in filenames:
				img_path=os.path.join(parent,filename)    #os.path.join(a,b) 合并路径
				if imghdr.what(img_path) in imgType_list:   ###判断文件是否为图片
					img = cv.imread(img_path, 0)  ###读取图片
					"""对文件进行其它操作"""
					cv.imshow("img",img)
					k = cv.waitKey(0)
					cv.destroyAllWindows()
					"""操作完成后保存"""
					cv.imwrite(img_path,img)

if __name__ == '__main__':
"""想要不覆盖原文件,可以先复制文件夹,然后处理图片"""
	CopyFile('E:\python_data1', 'E:\save_path5')
	Batch_img("E:\\save_path5")

该代码的优点在于先复制文件夹,然后在操作图片,不会覆盖原文件

并且可以操作多个子文件夹,以及文件下面包含图片和文件夹的情况

猜你喜欢

转载自blog.csdn.net/zangba9624/article/details/105950871