跑深度学习项目时,需要用到不同的照片。就像上图一样,我需要将0002_c1s1_000451_03.png和0002_c1s1_000451_03_vis.png分别放在不同的文件夹中。因为它们两个是不用的照片,我只需要0002_c1s1_000451_03_vis.png这种名字的照片,但是我的网络无法识别带有_vis 的名字,因此我需要将0002_c1s1_000451_03_vis.png 去掉_vis。然后得到去掉_vis的0002_c1s1_000451_03.png,再为这个图片创建同一个同名的文件夹,并将该照片放到这个文件夹中。 记录一下实现过程。
以下为实现步骤:
一、将照片分类:
import os
import shutil
current_path = os.getcwd()
print('当前目录:' + current_path)
filename_list = os.listdir(current_path)
print('当前目录下文件:', filename_list)
print('正在分类整理进文件夹ing...')
for filename in filename_list:
try:
name1, name2 = filename.split('.')
if name2 == 'jpg' or name2 == 'png':
_,_,_,_,a = name1.split('_') # 此行就是按照照片名中的 “_” 将照片名分割开,以最后
# 一个分割块为区分标志
if a == 'vis':
try:
os.mkdir("包含vis的文件") # 创建一个名字为 “包含vis的文件” 的文件夹
# print('创建文件夹' + name1[:-1])
except:
pass
try:
shutil.move(current_path + '\\' + filename, current_path + '\\' + "包含vis的文件")
print(filename + '转移成功!')
except Exception as e:
print('移动失败:' + e)
(注:将上述代码放在Pycharm中保存为.py文件)再将上面的代码时使用 pyInstaller 工具包将.py文件转化为.exe文件,可以参考CSDN上的大神们的文章。
1. 将.py文件打包成.exe文件
(1):win10 系统 win + r 输入cmd 打开命令行窗口
(2) : 安装 pyInstaller
pip install pyinstaller
(3):安装 pypiwin32
pip install pypiwin32
(4):使用 cd 命令 进入要打包的文件夹下
(5):开始打包
pyinstaller -F -i 图标.ico main.py -n 你打算给程序重命名的名字
注:参数含义
格式如下:
pyinstaller [opts] yourprogram.py
参数含义
-F 指定打包后只生成一个exe格式的文件(建议写上这个参数)
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 使用控制台,无界面(默认)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径,让其找到对应的库。
-i 改变生成程序的icon图标
例1.指定文件路径打包:pyinstaller -F D:\project\tanchishe.py
例2.不带窗口,后台运行打包:pyinstaller -F -w D:\project\tanchishe.py
例3.更换程序图标打包:pyinstaller -F -w -i D:\project\test.ico D:\project\tanchishe.py
(6):按下enter键,开始打包。出现下面的表示打包成功。
(7):在你要打包的 .py文件夹中会生成下面几个文件。
(8):在dis文件夹中会有一个.exe文件。
这个.exe文件就是用于分类的程序。
2. 将这个 “分类程序.exe” 保存到要分类的照片文件夹中,双击运行它,就能实现将两个不同照片名的照片分开。
二、 去除0002_c1s1_000451_03_vis.png 照片名中的 “_vis”。
import os
import shutil
# 定义要重命名的文件夹路径和去掉的字符串
folder_path = "E:/包含vis的文件"
remove_str = "_vis"
# 获取文件夹中所有文件的列表
file_list = os.listdir(folder_path)
# 遍历文件列表,为每个文件生成新的文件名并重命名
for old_name in file_list:
# 如果文件名中包含remove_str,则将其去掉
if remove_str in old_name:
new_name = old_name.replace(remove_str, "") # 使用replace方法将remove_str替换为空字符串
else:
new_name = old_name # 如果文件名中不包含remove_str,则不进行修改
# 构造文件的完整路径
old_path = os.path.join(folder_path, old_name)
new_path = os.path.join(folder_path, new_name)
# 使用shutil模块进行文件重命名
shutil.move(old_path, new_path)
print(f"{old_name} 重命名为 {new_name}")
三、为重命名的照片生成同名的文件夹。
import os
import shutil
# 原始文件夹路径
source_folder_path = "E:/new_val_1"
# 获取原始文件夹中的所有文件
files = os.listdir(source_folder_path)
# 遍历所有文件
for file in files:
# 将文件名和文件扩展名分开
file_name, file_extension = os.path.splitext(file)
# 如果是照片文件
if file_extension in [".jpg", ".jpeg", ".png", ".gif"]:
# 创建以文件名为名字的文件夹
new_folder_path = os.path.join(source_folder_path, file_name)
if not os.path.exists(new_folder_path):
os.mkdir(new_folder_path)
# 将照片移动到新文件夹中
source_path = os.path.join(source_folder_path, file)
shutil.move(source_path, new_folder_path)
print(f"{file_name} 完成文件夹创建")
print('全部文件创建完成。')
四、将文件夹中的照片重命名为foreground.png。
import os
import shutil
# 指定包含要重命名文件的文件夹的父文件夹路径
parent_folder = "E://new_val_1"
# 遍历所有子文件夹
for folder_name in os.listdir(parent_folder):
# 构造子文件夹的完整路径
folder_path = os.path.join(parent_folder, folder_name)
# 如果子文件夹是文件夹而不是文件,且其中只有一张图片
if os.path.isdir(folder_path) and len(os.listdir(folder_path)) == 1:
# 获取文件夹中的文件名
old_name = os.listdir(folder_path)[0]
# 仅处理.png和.jpg文件
if old_name.endswith(".png") or old_name.endswith(".jpg"):
# 构造新文件名
new_name = "foreground.png"
# 构造完整的文件路径
old_path = os.path.join(folder_path, old_name)
new_path = os.path.join(folder_path, new_name)
# 重命名文件
shutil.move(old_path, new_path)
print(f"{old_name} 已修改为foreground.png")
print('所有照片已经完成重命名。')
以上就能实现照片的分类、文件夹的创建以及文件夹中照片的重命名。