今天在做数据标注的时候遇到一个问题,就是如何把我需要的jpg格式的数据从文件夹里提取出来,这里注意:我的文件夹里不止有jpg格式的数据,还有其他乱七八糟的格式数据。
除了上面的要求之外,我还需要对每个jpg格式的文件还像之前一样存放在对应的目录下,而不是弄成一锅粥。
下面给出Python代码:
说明:
1、path是你的数据集存放目录
2、target_path是你需要存放的位置
3、拓展:你可以修改代码中的Str的值来到达你想提取的格式,我这里只提取jpg格式
import os,sys
import shutil
import glob
"""
说明:本程序是拷贝jpg代码的代码,会拷贝给定目录中所有的jpg格式的文件到指定的target_path中
"""
path = r"D:/数据集/01-250"
# 需要保存到的路径
target_path = "D:/2/"
dir = []
for root, dirs, files in os.walk(path):
# print(root) #当前目录路径
# print(dirs) #当前路径下所有子目录
# print(files) #当前路径下所有非目录子文件
dir.append(root)
print(dir)
if os.path.exists(target_path):
pass
else:
os.makedirs(target_path)
for file_name in dir:
# 图片目录
image_file_list = []
# image_file = os.path.join(file_name, '*.' + 'jpg')
Files = os.listdir(file_name)
for k in range(len(Files)):
# 提取文件夹内所有文件的后缀
Files[k] = os.path.splitext(Files[k])[1]
Str = '.jpg'
if Str in Files:
image_file = os.path.join(file_name, '*.' + 'jpg')
image_file_list.extend(glob.glob(image_file))
print("发现在", file_name, "中有文件", "一共有jpg格式的图片", len(image_file_list), "张\n")
#if os.path.exists(image_file):
# 提取最后一个文件名
last_file_name = file_name.split("/")[-1]
# 创建新的文件夹
new_file_name = os.path.join(target_path, last_file_name)
if os.path.exists(new_file_name):
continue
else:
os.makedirs(new_file_name)
# 复制文件
#print("%s中需要%s复制文件 \n"%(file_name, len(image_file_list)))
def _progress(oringal, target, count, total_size):
sys.stdout.write(
'\r>> 正在拷贝%s中的文件到%s 已完成%.1f%%' % (oringal, target, float(count) / float(total_size) * 100.0))
sys.stdout.flush()
for i,image in enumerate(image_file_list):
_progress(file_name, new_file_name, i, len(image_file_list))
shutil.copy(image, new_file_name)
print("\n")
else:
continue