python生成文件_Python生成文件列表

改进

# coding=utf-8

import os

def makeFileLists(imgPath, fileName='list.txt', withLabel=False, ext=['jpg','bmp','png']):

'''

makeFileList 函数用于包含多层目录的文件列表创建

Params:

imgPath :最上层的目录路径

fileName : 列表文件名称

withLabel : 默认为`False`,如果需要为每个图片路劲添加label,

则将该参数设置为`True`,图片所在目录的名称即为

该图片的label

ext : 图片格式

Usage:

makeFileLists('imagesRootPath', 'imageList.txt', False)

'''

# 判断路径是否存在

if not os.path.exists(imgPath):

print imagesPath, 'IS NOT EXIST, PLEASE CHECK IT!'

# 判断路径是否为目录,如果是,则对目录下的子目录做递归操作

elif os.path.isdir(imgPath):

subPath = os.listdir(imgPath)

subPath = [os.path.join(imgPath,path) for path in subPath]

for path in subPath:

makeFileLists(path, fileName, withLabel)

# 如果路径不是目录,则为图片的相对路径

else:

# 只保存指定格式的图片

if imgPath[-3:] in ext:

# 以追加的方式打开文件

f = open(fileName,'a')

# 如果需要添加label,则将图片所在目录的名称作为label

if withLabel:

line = imgPath+' '+(imgPath.split('/'))[-2]+'\n'

else:

line = imgPath+'\n'

# 写入文件

f.writelines(line)

f.close()

if __name__ == "__main__":

imagesPath = 'val'

fileName = 'val.txt'

makeFileLists(imagesPath, fileName, True)

使用递归方式生成包含子目录的文件列表

#coding=utf-8

import os

import shutil

import random

def getFileList(filePath='./images'):

print filePath

fileNames = os.listdir(filePath)

paths = filePath.split('/')

print paths

if len(paths) == 4:

fw = paths[2]

f = open('train_'+fw+'.txt','a')

fileList = os.listdir(filePath)

# ./images/-45_45/x9/9_18_-1.29865.jpg

# 根据路径自己组合

saveRootPath = paths[2]+'/'+paths[3]

fileListEnd = [saveRootPath+'/'+line+' '+paths[3][1]+'\n' for line in fileList] # 不要忘记加label

f.writelines(fileListEnd)

f.close()

for fn in fileNames:

subPath = filePath+'/'+fn

if os.path.isdir(subPath):

getFileList(subPath)

getFileList()

#coding=utf-8

#对一批训练数据,里面包含多个文件夹,每个文件夹下面存放的是相同类别的物体

# 根据这些文件夹生成列表、切分验证、训练集数据

import os

import shutil

import random

#因为caffe中,不允许文件名中有空格,所有需要重命名去除空格

def stdrename(imgfiles):

for l in imgfiles:

x_list=l.split(' ')

y = ''.join(x_list)

if l!=y:

print 'rename'

os.rename(l,y)

def GetFileList(FindPath,FlagStr=[]):

FileList=[]

FileNames=os.listdir(FindPath)

if len(FileNames)>0:

for fn in FileNames:

if len(FlagStr)>0:

if IsSubString(FlagStr,fn):

fullfilename=os.path.join(FindPath,fn)

FileList.append(fullfilename)

else:

fullfilename=os.path.join(FindPath,fn)

FileList.append(fullfilename)

if len(FileList)>0:

FileList.sort()

return FileList

def spiltdata(path_root,valratio=0.15):

classify_temp=os.listdir(path_root)

classify_file=[]

for c in classify_temp:

classify_file.append(os.path.join(path_root,c))

for f in classify_file:

imgfiles=GetFileList(f)

stdrename(imgfiles)#caffe 文件名不允许有空格

for c in classify_temp:

imgfiles=os.listdir(os.path.join(path_root,c))

nval=int(len(imgfiles)*valratio)

print nval

imgfvals=imgfiles[:nval]

#验证数据文件列表

for j in imgfvals:

if os.path.exists(os.path.join(path_root+'/'+'val',c)) is False:

os.makedirs(os.path.join(path_root+'/'+'val',c))

newname=os.path.join(path_root+'/'+'val',c)+'/'+j

oldname=os.path.join(path_root,c)+'/'+j

shutil.move(oldname,newname)

#训练数据文件列表

imgftrains=imgfiles[nval:]

for j in imgftrains:

if os.path.exists(os.path.join(path_root+'/'+'train',c)) is False:

os.makedirs(os.path.join(path_root+'/'+'train',c))

newname=os.path.join(path_root+'/'+'train',c)+'/'+j

oldname=os.path.join(path_root,c)+'/'+j

shutil.move(oldname,newname)

def writetrainlist(path_root):

classify_temp=os.listdir(path_root)#['cropblack','cropbrown','cropwhite','cropyellow']

classify_file=[]

for c in classify_temp:

classify_file.append(os.path.join(path_root,c))

for f in classify_file:

imgfiles=GetFileList(f)

stdrename(imgfiles)#caffe 文件名不允许有空格

sorted(classify_file)

strlist=''

for i,f in enumerate(classify_file):

imgfiles=GetFileList(f)

for image in imgfiles:

print image

strlist+=image+' '+str(i)+'\n'

txtlist=open(path_root+'.txt','w')

txtlist.write(strlist)

txtlist.close()

'''spiltdata('../headangle/data')'''

# writetrainlist('../faceshape/data/train')

# writetrainlist('../faceshape/data/val')

#spiltdata('../hair/data')

#writetrainlist('../hair/data/train')

#writetrainlist('../hair/data/val')

writetrainlist('../data/train')

writetrainlist('../data/val')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值