python生成数据集txt文件与读取数据集

目录

 

一、根据文件夹自动生成带label的txt文件:

二、根据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文件内容为:

python生成数据集txt文件与读取数据集_第1张图片

具体代码:

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()

 

你可能感兴趣的:(深度学习Tensorflow)