python脚本—(标注的xml文件的ctpn数据提取)、批量文件(检测是否在另一个文件夹下存在)(更改指定内容)

(以下代码仅做记录)

(一)xml标注文件ctpn数据提取

以下代码对在做ctpn的人,自己想训练自己的数据集的人有用:

import os
import xml.etree.ElementTree as ET
 			
 			
dirpath = './label'     #原来存放xml文件的目录
newdir = './labeltxt'  #修改label后形成的txt目录
if not os.path.exists(newdir):
	os.makedirs(newdir)
for fp in os.listdir(dirpath):
	root = ET.parse(os.path.join(dirpath,fp)).getroot()
	xmin, ymin, xmax, ymax = 0,0,0,0
	sz = root.find('size')
	width = float(sz[0].text)
	height = float(sz[1].text)
	filename = root.find('filename').text
	for child in root.findall('object'):
		sub = child.find('bndbox')
		xmin = int(sub[0].text)
		ymin = int(sub[1].text)
		xmax = int(sub[2].text)
		ymax = int(sub[3].text)
		with open(os.path.join(newdir,'gt_'+ fp.split('.')[0]+'.txt'), 'a+') as f:
			f.write(','.join([str(xmin), str(ymin),str(xmax),str(ymin), str(xmax), str(ymax),str(xmin),str(ymax) + '\n']))

(二)批量检测文件是否在另一个文件夹下存在

import os
path1 = './nonecard1/bin/'#你要检测的目标文件夹内是否存在该文件的文件目录
path2 = './bin/'#你要检测的文件所在的文件夹的文件目录
first=[]
second=[]
result=[]
files1=os.listdir(path1)
files2=os.listdir(path2)
for file1 in files1:
    for i in range(len(files1)):
        name1=file1.split('.')[0]
    first.append(name1)
for file2 in files2:
    for i in range(len(files2)):
        name2=file2.split('.')[0]
    second.append(name2)
for i in range(len(second)):
    if first[i] not in second:
        result.append(first[i])
print('共有%d个文件不在你的期望文件夹内:'%len(result))
print(result)#返回的即是在目标文件夹下不存在的文件名

(三)批量修改文件指定内容

对于文件内容查找,此处有一个坑(已填平)
python2的停更可以意味着python3站上了舞台中心,所以此处在文件内容查找的写法也跟以往不同。

  1. 对于读取文件内容,需要以‘rb’的方式
  2. 读取出来的内容需做decode处理(代码中以##########标明)
  3. 如有需要对应的转码方式为encode
#coding:utf-8
import os
path='./bin/'#需要替换的文件所在的 文件夹
Old_name='bad'#需要替换的内容
New_name='good'#欲得到的内容
for root,dir,files in os.walk(path):
    pass
file_list=[]
for file in files:
    file=os.path.join(root,file)
    file_list.append(file)
num=j=0
for i in range(len(file_list)):
    num+=1
    with open(file_list[i], 'rb') as f_r:
        lines = f_r.readlines()
        lines_list = []
        for line in lines:
            line=line.decode()##########
            if Old_name in line:
                j+=1
                line = line.replace(Old_name, New_name)
                lines_list.append(line)
            else:
                lines_list.append(line)
        file_data=''.join(lines_list)##########
    with open(file_list[i],'w') as f_w:
        f_w.write(file_data)
print('共修改了%d次\n共修改了%d个文件'%(j,num))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值