##########################################################################
循環讀取該目錄下所有子目錄和子文件
#########################################################################
import os
import os.path
def directory(rootdir): # 指明被遍歷的文件夾
for parent,dirnames,filenames in os.walk(rootdir): #三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
for dirname in dirnames: #輸出文件夾信息
print "parent is:" + parent
print "dirname is:" + dirname
for filename in filenames:
print "parent is:" + parent #輸出文件夾信息
print "filename is:" + filename #輸出文件信息
print "the full name of the file is:" + os.path.join(parent,filename) #輸出文件路徑信息
directory('G:\\test')
###############################################################################
保存圖片//修改圖片長寬比情況
###############################################################################
from PIL import Image
def modifysize(infile,outfile): #輸入文件,輸出文件
im = Image.open(infile)
(x,y) = im.size #read image size,讀取文件大小
x_s = 600 #define standard width,定義標准
y_s = 600 #calc height based on standard width
out = im.resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)
modifysize(' G:\\test\\one.jpg ', ' G:\\TEST\\one.jpg ')
from PIL import Image
def save(infile,outfile): #輸入文件,輸出文件
im = Image.open(infile)
(x,y) = im.size #read image size,讀取文件大小
x_s = x #define standard width,定義標准
y_s = y #calc height based on standard width
out = im.resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)
########################################################################
對文件夾中所有文件重命名函數
########################################################################
####################原來函數############################################
import os
def rename():
path=r'G:\TEST'
filelist=os.listdir(path)#該文件夾下所有的文件(包括文件夾)
for files in filelist:#遍歷所有文件
Olddir=os.path.join(path,files);#原來的文件路徑
if os.path.isdir(Olddir):#如果是文件夾則跳過
continue;
filename=os.path.splitext(files)[0];#文件名
filetype=os.path.splitext(files)[1];#文件擴展名
Newdir=os.path.join(path,filename[0]+filetype);#新的文件路徑
os.rename(Olddir,Newdir);#重命名
rename()
#####################修改后函數###########################################
import os
def rename(path,foldername): #傳入路徑和文件夾名
if len(foldername)!=5 and not(foldername.isdigit()): #傳入文件夾名是五位數的且字符串全為數值,不符合跳過
return
filelist=os.listdir(path)#該文件夾下所有的文件(包括文件夾)
i=0
for files in filelist:#遍歷所有文件
Olddir=os.path.join(path,files);#原來的文件路徑
if os.path.isdir(Olddir):#如果是文件夾則跳過
continue;
filename=os.path.splitext(files)[0];#文件名
filetype=os.path.splitext(files)[1].lower();#文件擴展名
if filetype!='.jpg':
filetype='.jpg'
number='%d' %i
Newdir=os.path.join(path,foldername+number+filetype);#新的文件路徑,新名稱命名規則
os.rename(Olddir,Newdir);#重命名
i=i+1
rename('G:\\TEST\\20010','20010')
###############################################################
#########################################################################
實現查找__過濾掉不需要的__修改大小寫功能(每個文件一行一行讀取)
#########################################################################
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 17 20:25:05 2017
@author: who
"""
import chardet
import os
import os.path
import re
import random
import string
rootdir=r'G:\TEST'
from PIL import Image
################保存圖片,從一個文件夾到另一個文件夾##############
def save(infile,outfile): #輸入文件,輸出文件
im = Image.open(infile)
(x,y) = im.size #read image size,讀取文件大小
x_s = x #define standard width,定義標准
y_s = y #calc height based on standard width
out = im.resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)
################過濾掉不需要的,修改大小寫功能#####################
for parent, dirnames, filenames in os.walk(rootdir): # 三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
try:
for filename in filenames:
filenamepre=os.path.splitext(filename.decode("gbk"))[0];#文件名前綴
filetype=os.path.splitext(filename.decode("gbk"))[1].lower();#文件擴展名
pswpath = os.path.join(parent, filename.decode("gbk"));
tmppath = os.path.join(r'G:\test',filename.decode("gbk")) #寫到另一個文件夾#
if filetype=='XXX': ####符合類型的文件####
tmp_file = open(tmppath, "w")
with open(pswpath) as f:
lines = f.readlines()
for line in lines: ####一行一行讀取 ####
if line.find('aaa') > -1: ####過濾掉含有aaa的這行####
continue
if line.find('CCC')>-1: ####將含有CCC這行小寫化####
tmp_file.write(line.lower())
else:
tmp_file.write(line)
tmp_file.close()
else:
save(pswpath,tmppath);
except IOError:
pass
#############################################################################
將所有文件所有文件名記錄下來,進行隨機分配
############################################################################
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 17 15:53:34 2017
@author: who
"""
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 15 18:07:03 2017
@author: Administrator
"""
import chardet
import os
import os.path
import re
import random
import string
from PIL import Image
rootdir=r'G:\TEST'; # 指明被遍歷的文件夾
dict={};
dictfileold={};
dictfileoldfile={};
dictparent={};
dir={}
i=0;
for parent,dirnames,filenames in os.walk(rootdir): #三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
j=0
try:
for filename in filenames: #輸出文件信息
filenamepre=os.path.splitext(filename)[0]; #文件名前綴
filetype=os.path.splitext(filename)[1].lower();#文件擴展名
tmpstr=parent.rsplit('\\')
fulloldname=os.path.join(parent,filename);
dict[filenamepre]=i; #舊名稱為key
dictfileold[i]=fulloldname; #舊路徑名稱為value
dictfileoldfile[i]=filenamepre; #舊文件名為value
dictparent[i]=parent;
dir[i]=tmpstr[-1] #得到上一級目錄
i=i+1;
j=j+1;
except IOError:
pass
##############文件數,進行隨機分配##########################################
foldernum=i;
randomnum=range(foldernum);
random.shuffle(randomnum);
trainnum=int(foldernum*0.7);
train=open(r'G:\train.txt','w')
val=open(r'G:\val.txt','w')
trainval=open(r'G:\trainval.txt','w')
for j in range(0,foldernum):
trainval.write(dictfileoldfile[j])
trainval.write('\n')
if j in randomnum[0:trainnum]:
train.write(dictfileoldfile[j])
train.write('\n')
else:
val.write(dictfileoldfile[j])
val.write('\n')
train.close()
val.close()
trainval.close()
############################################################################
找到符合要求的文件,進行隨機分配
- 編號要以6為數字命名,例如000034.jpg
- 圖片要是JPEG/JPG格式的,PNG之類的需要自己轉換下
- 圖片的長寬比(width/height)要在0.462-6.828之間,就是太過瘦長的圖片不要
############################################################################
# -*- coding: utf-8 -*-
"""
Created on Wed Feb 15 18:07:03 2017
@author: Administrator
"""
import chardet
import os
import os.path
import re
import random
import string
from PIL import Image
def save(infile,outfile): #輸入文件,輸出文件
im = Image.open(infile)
(x,y) = im.size #read image size,讀取文件大小
x_s = x #define standard width,定義標准
y_s = y #calc height based on standard width
out = im.resize((x_s,y_s),Image.ANTIALIAS) #resize image with high-quality
out.save(outfile)
def modifysize(infile,outfile): #輸入文件,輸出文件
try: #過濾掉任意的異常
im = Image.open(infile)
except :
return 0
(x,y) = im.size #read image size,讀取文件大小
x_s = 800 #define standard width,定義標准
y_s = 600
try: #過濾掉任意的異常
out = im.resize((x_s,y_s),Image.ANTIALIAS)
except :
return 0
out.save(outfile)
return 1
rootdir=r'E:\TEST'; # 指明被遍歷的文件夾
dict={};
dictfilenew={};
dictfileold={};
dictfilenewname={};
dictparent={};
dir={}
i=0;
for parent,dirnames,filenames in os.walk(rootdir): #三個參數:分別返回1.父目錄 2.所有文件夾名字(不含路徑) 3.所有文件名字
j=0
try:
for filename in filenames: #輸出文件信息
if((re.search(u'XXX',filename.decode("gbk"))==None): #找到符合要求文件名
continue;
filenamepre=os.path.splitext(filename.decode("gbk"))[0];#文件名前綴
filetype=os.path.splitext(filename.decode("gbk"))[1].lower();#文件擴展名
if (filetype!='.jpg' and filetype!='.png'): ##符合相應后綴的圖片
continue;
tmpstr=parent.rsplit('\\')
print u"上層目錄:"+tmpstr[-1]
if len(tmpstr[-1])!=5 or not(tmpstr[-1].isdigit()): #傳入文件夾名是五位數的且字符串全為數值,不符合跳過
continue
fullname=os.path.join(parent,filename.decode("gbk"));
if filetype!='.jpg':
filetype='.jpg'
number='%d' %j
Newname=tmpstr[-1]+number+filetype
Newdir=os.path.join(parent,tmpstr[-1]+number+filetype); #新的文件路徑,新名稱命名規則
fullnewname=os.path.join(parent,Newname.decode("gbk")); #將所有新路徑名稱,舊路徑名稱,新名稱,舊名稱,上一級目錄都用字典保存
fulloldname=os.path.join(parent,filename.decode("gbk"));
dict[fullnewname]=i; #新路徑名稱為key
dictfilenew[i]=fullnewname; #新路徑名稱為value
dictfileold[i]=fulloldname; #舊路徑名稱為value
dictfilenewname[i]=Newname.decode("gbk"); #新名稱為value
dictparent[i]=parent;
dir[i]=tmpstr[-1]
i=i+1;
j=j+1;
except IOError:
pass
###########################將所有文件隨機分配##################################
foldernum=i;
randomnum=range(foldernum);
random.shuffle(randomnum);
trainnum=int(foldernum*0.8);
for j in range(0,foldernum):
if j in randomnum[0:trainnum]:
outfile=os.path.join(r'E:\train',dictfilenewname[j])
modifysize(dictfileold[j],outfile)
else:
outfile=os.path.join(r'E:\test',dictfilenewname[j])
modifysize(dictfileold[j],outfile)