当前位置:
首页 > temp > python入门教程 >
-
《自拍教程73》Python 自动生成相册文件夹
案例故事: 接Python mediainfo批量重命名图片文件,测试图片是批量重命名好了,
但是将测试图片放于一个文件夹相册,图库App并不能显示图片信息,
为了测试的方便性, 需要把图片放到对应的文件夹下,这些文件夹导入手机后,
图库App则就会以相册的形式加载这些文件夹,效果如下:
根据相册名,点击进去就是准确的测试图片文件了,
我们需要根据图片名称,自动化生成相册文件夹。
准备阶段
- 为了减少歧义,我们还是建议延用输入输出文件架构。
- 预期效果如下, 双击运行auto_folder.py,会在Output_Folder文件夹下自动生成多个“图片格式_图片分辨率” 的子文件夹。
| auto_folder.py # 双击运行即可 | +---Input_Image # 输入,图片文件 | BMP_128x128_24bit_bmp.bmp | GIF_240x240_undef_gif.gif | JPEG_320x240_8bit_jpg_1.jpg | JPEG_320x240_8bit_jpg_2.jpg | PNG_500x500_32bit_png.png | \---Output_Folder # 输出,自动归类并生成相册文件夹 +---BMP_128x128 | BMP_128x128_24bit_bmp.bmp | +---GIF_240x240 | GIF_240x240_undef_gif.gif | +---JPEG_320x240 | JPEG_320x240_8bit_jpg_1.jpg | JPEG_320x240_8bit_jpg_2.jpg | \---PNG_500x500 PNG_500x500_32bit_png.png
Python批处理脚本形式
记住批处理脚本的精髓:批量顺序执行语句
# coding=utf-8
import os
from shutil import copyfile
curdir = os.getcwd()
# 输入文件夹,放入待文件夹归类的图片
input_image_path = os.path.join(curdir, "Input_Image")
filelist = os.listdir(input_image_path) # 获取文件列表
# 输出文件夹,已自动归类的文件夹存放在这里
output_folder_path = os.path.join(curdir, "Output_Folder")
# 如果没有Output_Folder这个文件夹,则创建这个文件夹
if not os.path.exists(output_folder_path):
os.mkdir(output_folder_path)
if filelist: # 如果文件列表不为空
for i in filelist: # 遍历文件列表
# 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
tempname_list = i.split("_") # 文件名按_切片
new_folder_name = tempname_list[0] + "_" + tempname_list[1]
new_folder_path = os.path.join(output_folder_path, new_folder_name)
try:
os.mkdir(new_folder_path)
except FileExistsError: # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
pass
# 第二步, 复制文件
image_file = os.path.join(input_image_path, i)
new_image_file = os.path.join(new_folder_path, i)
copyfile(image_file, new_image_file)
else:
print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
os.system("pause")
Python面向过程函数形式:
把需要反复调用的代码块,封装成一个函数,只预留一定参数输入输出接口。
# coding=utf-8
import os
from shutil import copyfile
def auto_folder(image_path, dest_folder):
'''根据文件名称,自动归类到对应的文件夹下去'''
# 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
image_file = os.path.split(image_path)[-1]
tempname_list = image_file.split("_") # 文件名按_切片
new_folder_name = tempname_list[0] + "_" + tempname_list[1]
new_folder_path = os.path.join(dest_folder, new_folder_name)
try:
os.mkdir(new_folder_path)
except FileExistsError: # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
pass
# 第二步, 复制文件
new_image_path = os.path.join(new_folder_path, image_file)
copyfile(image_path, new_image_path)
if __name__ == '__main__':
curdir = os.getcwd()
# 输入文件夹,放入待文件夹归类的图片
input_image_path = os.path.join(curdir, "Input_Image")
filelist = os.listdir(input_image_path) # 获取文件列表
# 输出文件夹,已自动归类的文件夹存放在这里
output_folder_path = os.path.join(curdir, "Output_Folder")
# 如果没有Output_Folder这个文件夹,则创建这个文件夹
if not os.path.exists(output_folder_path):
os.mkdir(output_folder_path)
if filelist: # 如果文件列表不为空
for i in filelist: # 遍历文件列表
image_path = os.path.join(input_image_path, i)
auto_folder(image_path, output_folder_path)
else:
print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
os.system("pause")
Python面向对象类形式
面向对象类的编程思维应该是这样的:
如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
这些种类的事物都具备哪些共有的属性与方法,
这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。
# coding=utf-8
import os
from shutil import copyfile
class AutoFolder(object):
def __init__(self, image_path):
self.image_path = image_path
def auto_folder(self, dest_folder):
'''根据文件名称,自动归类到对应的文件夹下去'''
# 第一步,获取文件名称,作为新的文件夹的名字,并创建新文件夹
image_file = os.path.split(self.image_path)[-1]
tempname_list = image_file.split("_") # 文件名按_切片
new_folder_name = tempname_list[0] + "_" + tempname_list[1]
new_folder_path = os.path.join(dest_folder, new_folder_name)
try:
os.mkdir(new_folder_path)
except FileExistsError: # 如果出现文件夹已经存在的错误,直接忽略,即一个文件夹下可能有多个图片文件。
pass
# 第二步, 复制文件
new_image_path = os.path.join(new_folder_path, image_file)
copyfile(self.image_path, new_image_path)
if __name__ == '__main__':
curdir = os.getcwd()
# 输入文件夹,放入待文件夹归类的图片
input_image_path = os.path.join(curdir, "Input_Image")
filelist = os.listdir(input_image_path) # 获取文件列表
# 输出文件夹,已自动归类的文件夹存放在这里
output_folder_path = os.path.join(curdir, "Output_Folder")
# 如果没有Output_Folder这个文件夹,则创建这个文件夹
if not os.path.exists(output_folder_path):
os.mkdir(output_folder_path)
if filelist: # 如果文件列表不为空
for i in filelist: # 遍历文件列表
image_path = os.path.join(input_image_path, i)
a_obj = AutoFolder(image_path)
a_obj.auto_folder(output_folder_path)
else:
print("It's a Empty folder, please input the image files which need to be renamed firstly!!!")
os.system("pause")
自拍教程(自动化测试Python教程,武散人编著)
原文链接:https://www.zipython.com/#/detail?id=281b5094c3864c53bb7284b2a18a3468
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数