(以下代码仅做记录)
(一)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站上了舞台中心,所以此处在文件内容查找的写法也跟以往不同。
- 对于读取文件内容,需要以‘rb’的方式
- 读取出来的内容需做decode处理(代码中以##########标明)
- 如有需要对应的转码方式为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))