python的N个小功能(找到符合要求的图片,重命名,改格式,缩放,进行随机分配)
##########################################################################
循环读取该目录下所有子目录和子文件
#########################################################################
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)
python的N个小功能(找到符合要求的图片,重命名,改格式,缩放,进行随机分配)的更多相关文章
- python的N个小功能(找到要爬取的验证码链接,并大量下载验证码样本)
# -*- coding: utf-8 -*- """ Created on Mon Mar 21 11:04:54 2017 @author: sl "&qu ...
- Python 入门学习(贰)文件/文件夹正则表达式批量重命名工具
基于 Udacity 的 Python 入门课程 Programming Foundations with Python 基于 Python 2.7 思路 Project 2 是一个去除文件名中所有数 ...
- python的N个小功能(文件内容的匹配替换)
# -*- coding: utf-8 -*- """ Created on Fri Feb 17 20:25:05 2017 @author: who "&q ...
- python的N个小功能(图片预处理:打开图片,滤波器,增强,灰度图转换,去噪,二值化,切割,保存)
############################################################################################# ###### ...
- python的N个小功能(连接数据库并下载相应位置的图片)
#################################################################################################### ...
- python的N个小功能(高斯模糊原理及实践)
原理: 二维高斯函数 1) 为了计算权重矩阵,需要设定σ的值.假定σ=1.5,则模糊半径为1的权重矩阵如下: 2) 这9个点的权重总和等于0.4787147,如果只计算 ...
- python的N个小功能(文本字段对应数值,经纬度计算距离,两个时间点计算时间间隔)
案例1 >>> import pandas as pd >>> df=pd.DataFrame({'A':[1,2,3],'B':[1,2,3],'C':[1,2, ...
- python的N个小功能之正则匹配
1.. 匹配任意除换行符“\n”外的字符:2.*表示匹配前一个字符0次或无限次:3.+或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*?重复任意次,但尽可能少重复,惰性匹配:4. .*? 表示匹配任意 ...
- python的N个小功能(更新文件)
########################################################################## #对于第二份文件:第一份与第二份不相同,以第二份为 ...
随机推荐
- 20155338 《JAVA程序设计》实验五网络编程与安全实验报告
20155338 <JAVA程序设计>实验五网络编程安全实验报告 实验内容 实验一: •两人一组结对编程: •结对实现中缀表达式转后缀表达式的功能 MyBC.java •结对实现从上面功能 ...
- Zabbix学习之路(八)之自动化监控网络发现和主动注册
1.网络发现 分两步走:创建发现规则(rule)和执行的动作(Action)(1)创建发现规则"Configuration"-->"Create discover ...
- jquery.validate使用 - 5
一些常用的验证脚本 不会写js了,只能从网上找一些常用的验证脚本. // 手机号码验证jQuery.validator.addMethod("mobile", function(v ...
- Flask 路由相关操作
URL Route URL 后接 / 作为目录级访问 URL 后不接 / 作为文件级访问 from flask import Flask app = Flask(__name__) @app.rout ...
- 关于Python的装饰器(2)
Python中被装饰器修饰的函数,解析后会生成一个参数是被修饰函数的装饰器函数对象,可以调用,可以接受传参(如果被修饰的函数定义了参数),实际调用的时候,尽管代码里值写了被修饰的函数,被调用的却是最终 ...
- 一个很easy的脚本--php获取服务器端的相关信息
存档: <html> <head> <meta http-equiv="content-type" content="text/html;c ...
- vbox虚拟机扩容(CentOS 7.2)
Preface My virtual machine was simply created by vagrant in default mode without anything about th ...
- PHP精确到毫秒秒杀倒计时实例
精确到毫秒秒杀倒计时PHP源码实例,前台js活动展示倒计时,后台计算倒计时时间.每0.1秒定时刷新活动倒计时时间. PHP: // 注意:php的时间是以秒算.js的时间以毫秒算 // 设置时区 da ...
- Python3实现机器学习经典算法(一)KNN
一.KNN概述 K-(最)近邻算法KNN(k-Nearest Neighbor)是数据挖掘分类技术中最简单的方法之一.它具有精度高.对异常值不敏感的优点,适合用来处理离散的数值型数据,但是它具有 非常 ...
- 转:为什么说招到合适的人比融到钱更加重要 - Hiring Great Talent is More Important Than Fund Raising
我在猎头行业工作了 20 多年,一直在帮助创业公司招聘优秀的人才.我服务过的客户既有 VC 投资的初创企业,也有即将 IPO 的公司.我和 200 多个 VC 合作过,也见过 300 多个客户失败的案 ...