Python脚本之对文件的处理

取文件夹中所有图片的图片名,并写入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')
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值