吴裕雄--天生自然python学习笔记:python 文件批量处理
Python 在文件处理方面表现突出,关于文件的处理
也是很多人经常用到的功能。 对
Python 的文件处理的技巧进行综合应用,比如把大量文件
的复制、按指定的文件名进行保存、找出重复的照片、将
所有的图片更改为相同大小等。
除此之外,用户还可以利用 Python 程序来实现文件的
查找功能。
文件管理应用
包括大量文件的
复制、! 根据指定的名称保存文件、找出 重复照片、将所有的图片更改为相同的大小 。
在日常生活中,我们也许还有过这样的体会:经常忘记以前创建的文件的保存
位置,这也可以利用 Python 程序来解决。
根据指定的编号保存文件
首先用 os.walk 方法把批量的图片按指定的编号进行复制, os.walk 方法可以搜
索指定目录及子目录下的所有文件。
应用程序概述
读取当前目录及子目录下的所有 jpg 文件,井复制到该目录下的 output2 目录,
文件名以 pO.jpg 、 pl 扣g 的形式进行编号。
import os,shutil cur_path=os.path.dirname(__file__) # 取得当前路径
sample_tree=os.walk(cur_path)
output_dir = 'output2' for dirname,subdir,files in sample_tree:
allfiles=[]
basename= os.path.basename(dirname)
if basename == output_dir: # output2 目录不再重复处理
continue for file in files: # 读取所有 jpg 文件名,存入 allfiles 列表中
ext=file.split('.')[-1]
if ext=="jpg": # 读取 *.jpg to allfiles
allfiles.append(file) if len(allfiles)>0: # 将 jpg 存入 output2 目录中
target_dir = dirname + '/' + output_dir
if not os.path.exists(target_dir):
os.mkdir(target_dir)
counter=0
for file in allfiles:
filename=file.split('.')[0] #取主文件名
ext=file.split('.')[1] #取扩展文件名
m_filename = "p" + str(counter) #重新给主文件名进行编号命名
destfile = "{}.{}".format(target_dir+'/'+m_filename, ext) # 加上完整路径
srcfile=dirname + "/" + file
print(destfile)
shutil.copy(srcfile,destfile); # 复制文件
counter +=1 print("完成...")
大批文件复制搬移及重新命名
在计算机文件的操作中,常会有需要将大量的文件重新命名后再分别整理到指
定的文件夹, Python 可以利用它特殊的文件处理能力,轻松地完成任务。
应用程序总览
在这个范例中,用户希望能对当前目录及子目录下的所有 mp3 文件进行处理,
除了滤除不合法字符,再依新的命名原则更改档名后复制到 <output> 目 录中。
将文件名中的不合法字符滤除,将新的合法文件名复制到<output> 目录 。
import os,shutil output_dir = 'output'
cur_path=os.path.dirname(__file__) # 取得目前路徑
sample_tree=os.walk(cur_path) for dirname,subdir,files in sample_tree:
allfiles=[]
basename= os.path.basename(dirname)
if basename == output_dir: # output 目錄不再重複處理
continue for file in files: # 讀取所有 mp3 檔名,存入 allfiles 串列中
ext=file.split('.')[-1]
if ext=="mp3": # 讀取 *.mp3 to allfiles
allfiles.append(file) if len(allfiles)>0: # 將 mp3 存入 output 目錄中
target_dir = dirname + '/' + output_dir
if not os.path.exists(target_dir):
os.mkdir(target_dir) for file in allfiles:
filename=file.split('.')[0] #主檔名
m_filename =""
for c in filename: # 將主檔名中不合法的字元去除
if c==" " or c=="." or c=="," or c=="、" or c=="," or c=="(" or c==")":
m_filename += "" # 去除不合法字元
else:
m_filename += c destfile = "{}.{}".format(target_dir+'/'+m_filename, ext) # 加上完整路徑
srcfile=dirname + "/" + file
print(destfile)
shutil.copy(srcfile,destfile); # 複製檔案 print("完成...")
找出重复的照片
电脑中的照片经过复制及移动,难免有些名称相同的照片,但内容可能不一样 。
利用 hashlib.md5 ()可以轻松比较两张照片是否相同。
应用程序概括
读取当前目录及子目录下的所有 png 和 jpg 文件,比较重复的照片 。
import os,hashlib cur_path=os.path.dirname(__file__) # 取得目前路径
sample_tree=os.walk(cur_path) allmd5s = dict()
n=0
for dirname,subdir,files in sample_tree:
allfiles=[]
for file in files: # 取得所有 .png .jpg 文件,存入 allfiles 列表中
ext=file.split('.')[-1]
if ext=="png" or ext=="jpg":
allfiles.append(dirname +'/'+file) if len(allfiles)>0:
for imagefile in allfiles:
img_md5 = hashlib.md5(open(imagefile,'rb').read()).digest()
if img_md5 in allmd5s:
if n==0:
print("找到下列重复的文件:")
n+=1
print(os.path.abspath(imagefile))
print(allmd5s[img_md5] + "\n")
else:
allmd5s[img_md5] = os.path.abspath(imagefile) print("完成...")
把图片文件改为相同大小
制作网页或往网站传输图片时,很多时候会要求规定大小的图片,遇到这种情
况,如果只有少量文件,手动改一下图片尺寸就可以了;但如果需要调整大小的图
片量非常多,我们就可以用 Python 来进行自动处理。
更改图片大小的操作必须要用 Image 对象,所以首先要导入 Image 包 :
导入之后就可通过 Image.op en (fi l e)来建立编辑该照片的 Image 对象,再通过该
对象的方法来更改照片大小。
例如 : 创建 Image 对象 img ,先以 size 属性取得照片的宽和高,再用 res i ze ()方
法调整其宽度和高度,然后用 save ()方法进行保存,最后用 close()方法关闭对象。
应用程序总览
读取当前目录及子目录下的所有 png 和 jpg 文件,把照片宽度设为 800pixe l ,高
度按比例调整,并把新的文件复制到 resized_photo 目 录下。
import os
from PIL import Image image_dir = 'resized_photo'
image_width = 800 cur_path=os.path.dirname(__file__) # 取得当前路径
sample_tree=os.walk(cur_path) for dirname,subdir,files in sample_tree:
allfiles=[]
basename= os.path.basename(dirname)
if basename == image_dir: # resized_photo 目录不再重复处理
continue
for file in files: # 取得所有 .png .jpg 文件,存入 allfiles 列表中
ext=file.split('.')[-1]
if ext=="png" or ext=="jpg":
allfiles.append(dirname +'/'+file) if len(allfiles)>0:
target_dir = dirname + '/' + image_dir
if not os.path.exists(target_dir):
os.mkdir(target_dir)
for file in allfiles:
pathname,filename = os.path.split(file)
img = Image.open(file)
w,h = img.size
img = img.resize((image_width,int(image_width/float(w)*h)))
img.save(target_dir+'/'+filename)
print("<{}> 复制完成!".format(target_dir+'/'+filename))
img.close() print("完成...")
吴裕雄--天生自然python学习笔记:python 文件批量处理的更多相关文章
- 吴裕雄--天生自然HADOOP学习笔记:hadoop集群实现PageRank算法实验报告
实验课程名称:大数据处理技术 实验项目名称:hadoop集群实现PageRank算法 实验类型:综合性 实验日期:2018年 6 月4日-6月14日 学生姓名 吴裕雄 学号 15210120331 班 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL UPDATE 更新
如果需要修改或更新 MySQL 中的数据,我们可以使用 SQL UPDATE 命令来操作. 语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法: UPDATE table ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 插入数据
MySQL 表中使用 INSERT INTO SQL语句来插入数据. 可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 以下为向MySQL数据表插入数据通 ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL简介
MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用 ...
- 吴裕雄--天生自然 oracle学习笔记:oracle理论学习详解及各种简单操作例子
1. 数据库的发展过程 层次模型 -->网状模型 -->关系模型 -->对象关系模型 2. 关于数据库的概念 DB:数据库(存储信息的仓库) DBMS:数据库管理系统(用于管理数据库 ...
- 吴裕雄--天生自然HADOOP学习笔记:基本环境配置
实验目的 学习安装Java 学习配置环境变量 学习设置免密码登陆的方法 掌握Linux环境下时间同步的配置 实验原理 1.Java的安装 java是大数据的黄金语言,这和java跨平台的特性是密不可分 ...
- 吴裕雄--天生自然HADOOP学习笔记:使用yum安装更新软件
实验目的 了解yum的原理及配置 学习软件的更新与安装 学习源代码编译安装 实验原理 1.编译安装 前面我们讲到了安装软件的方式,因为linux是开放源码的,我们可以直接获得源码,自己编译安装.例如: ...
- 吴裕雄--天生自然HADOOP学习笔记:Shell工具使用
实验目的 学习使用xshell工具连接Linux服务器 在连上的服务器中进入用户目录 熟悉简单的文件操作命令 实验原理 熟悉shell命令是熟悉使用linux环境进行开发的第一步,我们在linux的交 ...
- 吴裕雄--天生自然HTML学习笔记:HTML 布局
网页布局对改善网站的外观非常重要. 请慎重设计您的网页布局. <!DOCTYPE html> <html> <head> <meta charset=&qu ...
- 吴裕雄--天生自然MySQL学习笔记:MySQL 安装
所有平台的 MySQL 下载地址为: MySQL 下载:https://dev.mysql.com/downloads/mysql/ 注意:安装过程我们需要通过开启管理员权限来安装,否则会由于权限不足 ...
随机推荐
- MarkDown简易教程+语法
一.标题 一个#是一级,两个#是二级,最大六级 二.字体 1.加粗 要加粗的文字左右分别用两个*号包起来 2.斜体 要倾斜的文字左右分别用一个*号包起来 3.斜体加粗 要倾斜和加粗的文字左右分别用三个 ...
- 尝试用kotlin做一个app(二)
导航条 我想实现的效果是这样的 类似于ViewPager的效果,子类导航页面可以滑动,当滑动某个子类导航页面,导航线会平滑地向父类导航移动 ·添加布局 <!--导航分类:编程语言/技术文档/源码 ...
- Ubuntu系统下QEMU环境搭建
(这篇文章是在搭建QEMU环境时,在网上找到了一些教程资料,并在实际操作中遇到的一些问题的整理) 下载Linux内核 下载内核有两种方法,一种是用git直接下载内核代码树,方便后面的内核开发.另一种是 ...
- 79.常用的返回QuerySet对象的方法使用详解: filter, exclude,annotate
返回新的QuerySet的常用方法: 1.filter: 将满足条件的数据提取出来,返回一个新的QuerySet 以下所使用的模型article,category,定义模型models.py文件中,示 ...
- MyBatis 关联查询的实现:多对多
2个实体:订单.商品,一个订单可以包含多种商品,同时一种商品可以属于多个订单,即多对多. 商品表goods_tb: 订单表order_tb: no是订单编号,user_id与用户表的id关联. 需要新 ...
- Spark核心算子
Spark RDD: Transformation Meaning map(func) 返回一个新的分布式数据集,该数据集是通过将源的每个元素传递给函数func处理形成的. filter(func) ...
- 题解 P6098 【[USACO19FEB]Cow Land G】
震惊,蒟蒻学树剖第二天就打题解 所以说,理解之后树剖这种东西其实难度真心不大.至少这种模板题都可以秒切的 这里推荐一个博客: 树剖详解 蒟蒻就是在这个博客上学到的 如果想看我自己写的总结,请点 我的博 ...
- MySQL--基础SQL--DCL
DCL语句主要是DBA用来管理系统中的对象权限时使用,一般的开发人员很少使用. 1.创建一个数据库用户在z1,具有对sakila数据库中所有表的SELECT/INSERT权限: GRANT SELEC ...
- jsp的appilication.getInitParameter()方法无法获取到值的问题
背景介绍 今天研究jsp的内置对象时发现,使用appilication.getInitParameter()从web.xml文件中获取值的时候,死活获取不到,折腾了将近一个小时,后来出现问题的原因却让 ...
- 18 11 04 初用单片机 c语言学习
---恢复内容开始--- 1 作为单片机使用的的 c 语言学习 ++ 增位运算符 在原有基础上加一 -- 相同 由于单片机只有 ~ 取反 & 两个 参数里有没有 | 两个 参数里有没有 ^ 两 ...