目录
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")
该代码的优点在于先复制文件夹,然后在操作图片,不会覆盖原文件
并且可以操作多个子文件夹,以及文件下面包含图片和文件夹的情况