为了实现随机删除2000个txt文件及其对应的图片,我们需要先得到所有txt文件的列表,然后从中随机选择2000个文件。接着,我们找到每个选中的txt文件对应的图片文件,并将它们删除。
import os
import random
import shutil
def random_delete_files(images_folder, labels_folder, num_files_to_delete):
# 获取labels文件夹中所有txt文件的列表
txt_files = [file for file in os.listdir(labels_folder) if file.endswith('.txt')]
# 确保要删除的文件数量不超过实际文件数量
num_files_to_delete = min(num_files_to_delete, len(txt_files))
# 从所有txt文件中随机选择要删除的文件
files_to_delete = random.sample(txt_files, num_files_to_delete)
for txt_file in files_to_delete:
# 获取对应的图片文件名
image_filename = os.path.splitext(txt_file)[0] + '.jpg' # 假设图片格式为.jpg,根据实际情况修改
image_path = os.path.join(images_folder, image_filename)
# 检查是否存在同名图片文件并删除
if os.path.exists(image_path):
os.remove(image_path)
# 删除对应的txt文件
txt_path = os.path.join(labels_folder, txt_file)
os.remove(txt_path)
# 替换为你的images和labels文件夹路径,以及要删除的文件数量
images_folder_path = '/path/to/your/images/folder'
labels_folder_path = '/path/to/your/labels/folder'
num_files_to_delete = 2000
random_delete_files(images_folder_path, labels_folder_path, num_files_to_delete)
请根据你的实际情况,将images_folder_path
和labels_folder_path
替换为对应的文件夹路径,并将num_files_to_delete
设置为你想要随机删除的文件数量。
这段代码将在labels
文件夹中随机删除指定数量的txt文件,并且将对应名称的图片文件从images
文件夹中删除。
若出现
Traceback (most recent call last):
File "C:/YOLO5.0/yolov5/txtdelete.py", line 25, in <module>
delete_empty_txt_and_images(labels_folder_path, images_folder_path)
File "C:/YOLO5.0/yolov5/txtdelete.py", line 5, in delete_empty_txt_and_images
for txt_filename in os.listdir(labels_folder):
FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'DOTA_split/train/labeis'报错
则可使用绝对路径的方式,除去报错。请注意,在Python字符串中,反斜杠\
被用作转义字符。为了在字符串中表示路径,需要使用两个反斜杠\\
或者使用原始字符串(在字符串前加r
或R
)。
下面是使用原始字符串的示例:
images_folder_path = r'C:\YOLO5.0\yolov5\split\train\imagesr'
或者使用双反斜杠的示例:
images_folder_path = 'C:\\YOLO5.0\\yolov5\\split\\train\\imagesr'
无论你选择哪种方式,确保路径信息正确,包括文件夹名称的拼写和路径是否存在。同时,也要确保你有足够的权限来操作这些文件夹中的文件。