统计、处理数据集文件时,有一些命令和脚本可能会用到,记录在这里以免之后在这些小问题上浪费时间。
一、命令
1.查找文件夹下指定名字的文件
例如: find . -name "*det*"
其中 .
表示当前目录,*det*
表示查找文件名中含det的文件。
2.删除当前文件夹下的所有文件
rm * ## 在删除之前可以使用 find * 查看想要删除的内容与你想的是否相同
3.查找文件夹下指定名字的文件并删除
find . -name "*det*" | xargs rm -rf
4.查找文件夹下指定名字的文件并复制到指定路径
find . -name "*det*" | xargs cp -t 指定path
5.记录运行某命令之后的输出结果到txt文件中
例如: ls | tee ls_rec.txt
二、Python脚本
1.将某文件夹下的文件名保存到txt文件中
例如,pascal_voc格式数据集中ImageSets/Main中的train.txt、trainval.txt等文件就可以通过此方法生成
import os
file_path = "/home/……"
path_list = os.listdir(file_path)
path_name = []
for i in path_list:
path_name.append(i.split(".")[0]) # 去掉后缀名
for file_name in path_name:
with open("/home/……/train.txt","a") as F:
F.write(file_name + "\n")
print(file_name)
F.close()
2.将与xml(可为其他文件类型)文件名相同的图片copy到指定文件夹中
由于我的数据集图片含有很多未标注的,所以为了将有有效标注的图片筛选出来,使用下方脚本。参考1.进行扩充。
import os
import shutil
file_path1 = "/home/……"
path_list1 = os.listdir(file_path1)
file_path2 = "/home/……"
path_list2 = os.listdir(file_path2)
path_name1 = []
path_name2 = []
for x in path_list1:
path_name1.append(i.split(".")[0]) # 去掉后缀名
for i in path_list2:
path_name2.append(i.split(".")[0]) # 去掉后缀名
for a in path_name1:
for b in path_name2:
if a==b:
img_path = os.join(/……,str(b)+'.jpg')
shutil.copy(img_path,'指定path')
else
continue
3.统计当前文件夹下文件总数
import os
DIR = "/home……"
print("文件夹内文件个数:",len(os.listdir(DIR)))
4.统计txt文件中共有多少行 (pascal_voc格式中每行代表一个图片名称)
file_name = "/home……"
myfile = open(file_name)
lines = len(myfile.readlines())
print("There are %d lines in ***.txt",%(lines))