多层文件夹下文件名字改成统一命名
在对原始数据集标注的时候,标注是好好的,但是先看一下文件结构:
–data(一级目录)
----CV3(二级目录)
--------front(三级目录)
--------left
--------rear
--------right
----CV5
--------front
--------left
--------rear
--------right
…
实际上文件都是分布在各个子文件夹中,而且子文件中的文件可能会和其他子文件中的文件重名,简单的把他们复制到一个地方时候不好使。
提出需求:
将每个文件中提取出来,将原来的jpg和对应的xml文件重新命名,而且重型命名后的文件也是一 一对应的,如果jpg文件没有对应的xml文件,直接将他们复制到对应文件中进行改名字就可以。
解决:
import os
import shutil
i = 1
# 设置原始文件夹和目标文件夹的路径
source_folder = "C:\\Users\\Administrator\\Desktop\\data"
target_folder = "C:\\Users\\Administrator\\Desktop\\target_data"
# 遍历所有子文件夹
for root, dirs, files in os.walk(source_folder):
# 在每个文件夹中寻找匹配的 JPG 和 XML 文件
for file in files:
if file.endswith(".jpg"):
# 如果找到 JPG 文件,则查找相应的 XML 文件
basename = os.path.splitext(file)[0]
xml_file = os.path.join(root, basename + ".xml")
if os.path.exists(xml_file):
# 如果找到匹配的 XML 文件,则重命名并移动两个文件
new_name = str(i)
new_jpg = os.path.join(target_folder, new_name + ".jpg")
new_xml = os.path.join(target_folder, new_name + ".xml")
shutil.move(os.path.join(root, file), new_jpg)
shutil.move(xml_file, new_xml)
i += 1
else:
# 如果没有匹配的 XML 文件,则只移动 JPG 文件
new_name = str(i)
new_jpg = os.path.join(target_folder, new_name + ".jpg")
shutil.move(os.path.join(root, file), new_jpg)
i += 1
结果就是在target_data下重新整理了所有杂乱的文件。
目标文件文件应该已经存在,否则报错。
原文件不存在,在执行操作前请备份一份,以免出现错误。