目录
二、根据txt文件自动生生成filename,label列表数据:
一、根据文件夹自动生成带label的txt文件:
这是用于给图片打标签并生成txt文件的程序;
creat_labeled_txt 给三级目录里的文件打标签,并且标签根据第二级级目录自动生成,如shan:/right(wrong):/a.jpg
在下面程序里主要用了这几个功能:
1、os.listdir('dir'):用于看某一目录下的文件名,返回list
2、txt文件写入:
f = open('dir', mode)
mode = 'w' 时,是文件覆盖写入;
mode = 'a'时,文件是在最后添加写入;
f.write(str + '\n')
程序:
import os
#分三级目录,如A/B/a.jpg
#input_path为一级目录;
#
def creat_filelist(input_path, classes):
#创建三级目录
#index 一定是str类型,不可以为int
dir_image1 = [] #二级目录
file_list = [] #三级目录
for index, name in enumerate(classes):
print('index', index)
index_str = str(index)
dir_image1_temp = input_path + '/' + name + '/'
for dir2 in os.listdir(dir_image1_temp):
dir_image2_temp = dir_image1_temp + '/' + dir2 + ' ' + index_str
# dir_image2_temp1 = dir_image2_temp.join(' ')
# dir_image2_temp2 = dir_image2_temp.join(index)
file_list.append(dir_image2_temp)
return dir_image1, file_list
def creat_txtfile(output_path, file_list):
with open(output_path, 'w') as f:
for list in file_list:
print(list)
f.write(str(list) + '\n')
def main():
dir_image0 = 'E:/shan'
dir_image1 = os.listdir(dir_image0)
classes = dir_image1
print(classes)
dir_list, file_list = creat_filelist(dir_image0, classes)
#print(file_list[0:3])
output_path = './creat_txt1.txt'
creat_txtfile(output_path, file_list)
if __name__ == '__main__':
main()
最后生成的creat_txt1.txt文件内容为:
具体代码:
https://github.com/leeleeleeleee/creat_txt_dataset/commit/8f4a28c97a3ece470c24d49444fcf2553984babd
二、根据txt文件自动生生成filename,label列表数据:
知识点:
1、strip函数:
声明:s为字符串,rm为要删除的字符序列
s.strip(rm) 删除s字符串中开头、结尾处,位于 rm删除序列的字符
s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的字符
s.rstrip(rm) 删除s字符串中结尾处,位于 rm删除序列的字符
当rm为空时,默认删除空白符(包括'\n', '\r', '\t', ' ')
2、txt文件读取:
Python的文本文件的内容读取中,有三类方法:read()、readline()、readlines(),这三种方法各有利弊。
优点 | q缺点 | |||
f.read() | 方便、简单; 一次性读取出文件放在一个大字符串中; | 文件过大的时候,占用内存会很大 | ||
f.readline() | 占用内存小; 逐行读取; | 由于是逐行读取的,速度慢 | ||
f.readlines() | 一次性读取文本内容; 速度比较快; 用for 循环控制 | 随着文本的增大,占用内存会越来越多; |
也可用tensorflow里的这句:
files_labels = [l.strip().split(' ') for l in tf.gfile.FastGFile(
list_file, 'r').readlines()]
程序:
import os
def read_label_txt(data_dir):
filenames = []
labels = []
with open(data_dir) as f:
dir_labels = [line.strip().split(' ') for line in f.readlines()]
#一定要用strip,因为原txt文件每行后面会带‘\n‘字符;
for filename, label in dir_labels:
filenames.append(filename)
labels.append(label)
return filenames, labels
def main():
data_dir = './creat_txt1.txt'
image_dir, labels = read_label_txt(data_dir)
#print('image_dir: ', image_dir[0:5])
print('labels: ', labels[0:5])
if __name__ == '__main__':
main()