取文件夹中所有图片的图片名,并写入txt文件中
import os
import re
images_path = '/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/val' # 图片存放目录
txt_save_path = '/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/train.txt' # 生成的图片列表清单txt文件名
fw = open(txt_save_path, "w")
# 读取函数,用来读取文件夹中的所有函数,输入参数是文件名
def read_directory(directory_name):
for filename in os.listdir(directory_name):
print(filename) # 仅仅是为了测试
fw.write(filename + '\n') # 打印成功信息
# img = cv2.imread(directory_name + "/" + filename)
# #####显示图片#######
# cv2.imshow(filename, img)
# cv2.waitKey(0)
# #####################
#
# #####保存图片#########
# cv2.imwrite("D://wangyang//face1" + "/" + filename, img)
if __name__ == '__main__':
read_directory(images_path)#这里传入所要读取文件夹的绝对路径,加引号(引号不能省略!)
对txt文件内容去除.jpg后缀
with open('/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/train.txt', 'r') as fpr:
content = fpr.read()
content = content.replace('.jpg', '')
print(content)
with open('/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/train1.txt', 'w') as fpw:
fpw.write(content)
按文件名划分图片
这个脚本目的是 读取一个txt文件里面的每一行,取出每一行,加上要移动的后缀,移动到指定文件夹中。例如读取train1中的每一行,然后将label里面对应的文件移动到zz里面。
import shutil
if __name__ == '__main__':
file_object = open('/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/train1.txt')
try:
for line in file_object:
# print(line)
shutil.move('/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/label/'+line.rstrip('\n')+'.txt', "/home/wyqq/Desktop/fewshotlogodetection_round1_train_202204/zz/")
finally:
file_object.close()
比较两个文件夹,删除不同的文件
# -*- coding: utf-8 -*-
import os
def contrastDir(path_jpg,path_txt):
jpg_list = []
txt_list = []
for root, dirs, files in os.walk(path_jpg):
# 文件夹a路径
for file in files:
if os.path.splitext(file)[1] == '.jpg':
jpg_list.append(os.path.splitext(file)[0])
for root, dirs, files in os.walk(path_txt):
# 文件夹b路径
for file in files:
if os.path.splitext(file)[1] == '.txt':
txt_list.append(os.path.splitext(file)[0])
#对比txt与jpg
diff = set(txt_list).difference(set(jpg_list))
print(len(diff))
for name in diff:
print(name + ".txt"+'has No corresponding image file')
#对比jpg与txt
diff2 = set(jpg_list).difference(set(txt_list))
print(len(diff2))
for name in diff2:
print(name + ".jpg"+" has No corresponding XML file")
#删除没有的对应txt的图像
os.remove(path_jpg+name+'.jpg')
return jpg_list,txt_list
if __name__ == '__main__':
my_dir_jpg = '/home/wyqq/Desktop/Program/object-detection/yolov5-6.1/tennis_data/images/ImageData/'
my_dir_txt = '/media/wyqq/YuQing-Data/DataProcess/labels/'
contrastDir(my_dir_jpg, my_dir_txt)
在处理YOLO的txt标签文件时,发现要对txt的第一列标签类别顺序进行更改,所以下面脚本是对txt文件第一列更改的。
import os
txt_dir = '/home/wyqq/Desktop/utils/txt/val1'
out_dir = '/home/wyqq/Desktop/utils/txt/val2'
for name in os.listdir(txt_dir):
if not name.endswith('.txt'):
continue
txt_path = os.path.join(txt_dir,name)
out_path = os.path.join(out_dir,name)
with open(txt_path, mode='r', encoding='utf-8') as f:
lines = f.readline()
temp = []
while lines:
tem = lines.split()
if tem[0] == '38':
tem[0] = '2'
if tem[0] == '32':
tem[0] = '1'
temp.append(' '.join(tem))
lines = f.readline()
f.close()
if not os.path.exists(out_dir):
os.makedirs(out_dir)
with open(out_path, mode='w', encoding='utf-8') as out:
for i in temp:
out.write(i+'\n')
print('done')