python处理数据(二)
处理PDF文件
PyPDF2简介
作为 PDF 工具包构建的纯 python 库。 它可以:
提取文档信息(标题,作者,... ...)
一页一页地分割文件
一页一页地合并文件
裁剪页面
将多个页面合并成一个页面
加密和解密 PDF 文件
通过使用纯 Python,它应该在任何 Python 平台上运行,而不需要依赖外部库。 它也可以完全使用 StringIO 对象而不是文件流,允许内存中的 PDF 操作。 因此,对于管理或操作 pdf 文档的网站来说,它是一个有用的工具。
import codecs import PyPDF2
import os files = list() # 建立一个存放pdf文件的列表
for fileName in os.listdir("book"): # 遍历之前生成的pdf所在的文件夹
if fileName.endswith(".pdf"): # 找出以.pdf结尾的文件
files.append(fileName) # 将查找出来的pdf文件放进files列表中 newFiles = sorted(files, key=lambda d: int(d.split(".pdf")[0])) # 对列表中的文件进行排序
print(newFiles) os.chdir("book")
pdfWriter = PyPDF2.PdfFileWriter()#生成一个空白的pdf文件
for item in newFiles:
pdfReader = PyPDF2.PdfFileReader(open(item, "rb")) # 以只读的方式依次打开每个pdf
for page in range(pdfReader.numPages): # 读取pdf有多少页
pdfWriter.addPage(pdfReader.getPage(page)) # 将打开的pdf文件内容一页一页的复制到空白pdf文件里面pdfWriter with codecs.open("books.pdf", "wb") as f: # 生成books.pdf文件
pdfWriter.write(f) # 将复制的内容写入到books.pdf文件中

最后生成一个pdf文件,即books.pdf,包含之前所有的章节的内容。
处理图片
图像处理是一门应用非常广的技术,而拥有非常丰富第三方扩展库的 Python 当然不会错过这一门盛宴。PIL (Python Imaging Library)是 Python 中最常用的图像处理库,如果你是python2.x,可以通过以下地址进行下载:http://www.pythonware.com/products/pil/index.htm,找到相对应的版本进行下载就可以了。
注意:PIL模块在python3.x中已经替换成pillow模块,文档地址:http://pillow.readthedocs.io/en/latest/,直接使用pip3 install pillow即可安装模块,导入时使用from PIL import Image。
安装模块
pip install pillow
例子:
from PIL import Image
image = Image.open("test.jpg")
print(image.format, image.size, image.mode) # 打印出图片格式、尺寸、模式
image.show() # 把图片显示出来
结果如下:

Image的三个属性:
format : 识别图像的源格式,如果该文件不是从文件中读取的,则被置为 None 值。
size : 返回的一个元组,有两个元素,其值为象素意义上的宽和高。
mode : RGB(true color image),此外还有,L(luminance),CMTK(pre-press image)。
Image的方法介绍:
show():显示最近加载的图像
open(infilename): 打开文件
save(outfilename):保存文件
crop((left, upper, right, lower)):从图像中提取出某个矩形大小的图像。它接收一个四元素的元组作为参数,各元素为(left, upper, right, lower),坐标系统的原点(0, 0)是左上角。
#image的方法
#image.show()
#image.open(file)
#image.save(outputfile)
#image.crop(left, upper, right, lower) # 抠图 # Image的几何处理:
# out = im.resize((128, 128)) # 调整图片大小
# out = im.rotate(45) # 逆时针旋转 45 度角。
# out = im.transpose(Image.FLIP_LEFT_RIGHT) # 左右对换。
# out = im.transpose(Image.FLIP_TOP_BOTTOM) # 上下对换。
# out = im.transpose(Image.ROTATE_90) # 旋转 90 度角。
# out = im.transpose(Image.ROTATE_180) # 旋转 180 度角。
# out = im.transpose(Image.ROTATE_270) # 旋转 270 度角。
抠图,把头像抠出来
from PIL import Image
image = Image.open("test.jpg") cutjpg = image.crop((320, 65, 460, 220))
cutjpg.show()
结果如下:

把头像翻转180度
from PIL import Image
image = Image.open("test.jpg")
position = (320, 65, 460, 220)
cutjpg = image.crop(position).transpose(Image.ROTATE_180)
image.paste(cutjpg, position)
image.show()
结果如下:

把图片缩小
from PIL import Image
image = Image.open("test.jpg")
position = (320, 65, 460, 220)
cutjpg = image.crop(position).transpose(Image.ROTATE_180)
image.paste(cutjpg, position) (x, y) = image.size
newx = 30
newy = int(y*newx/x)
newimage = image.resize((newx, newy))
newimage.show()
结果如下:

生成验证码
import random
import string from PIL import Image, ImageFont, ImageDraw, ImageFilter # 字体的位置,不同版本的系统会有不同
font_path = "msyh.ttf"
# 生成几位数的验证码
number = 4
# 生成验证码图片的高度和宽度
size = (100, 30)
# 背景颜色,默认是白色
bgcolor = (255, 255, 255)
# 字体颜色,默认是蓝色
fontcolor = (0, 0, 255)
# 干扰线颜色,默认是红色
linecolor = (255, 0, 0)
# 是否要加入干扰线
draw_line = True
# 加入干扰线条数的上下限
line_number = 30 #生成一个随机字符串 def getNumber():
source = list(string.ascii_letters) + list(string.digits)
return "".join(random.sample(source, number)) #绘制干扰线
def getLine(draw, width, height):
begin = random.randint(0, width), random.randint(0, height)
end = random.randint(0, width), random.randint(0, height)
draw.line([begin, end], fill=linecolor) def getCode():
width, height = size
image = Image.new("RGBA", size, bgcolor)
font = ImageFont.truetype(font_path, 25)
draw = ImageDraw.Draw(image)
text = getNumber()
font_width, font_height = font.getsize(text)
draw.text(((width - font_width) / 2, (height - font_height) / 2), text, font=font, fill=fontcolor) # 填充字符串
if draw_line:
for i in range(line_number):
getLine(draw, width, height) # image = image.transform((width + 20, height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR) # 创建扭曲
image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) # 滤镜,边界加强
image.save('idencode.png') # 保存验证码图片
# image.show()
if __name__ == '__main__':
getCode()
结果如下:

python处理数据(二)的更多相关文章
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- 数据挖掘(二)用python实现数据探索:汇总统计和可视化
今天我们来讲一讲有关数据探索的问题.其实这个概念还蛮容易理解的,就是我们刚拿到数据之后对数据进行的一个探索的过程,旨在了解数据的属性与分布,发现数据一些明显的规律,这样的话一方面有助于我们进行数据预处 ...
- MySQL实验准备(二)--Python模拟数据(MySQL数据库)
Python模拟数据(MySQL数据库) 数据模拟 目的:模拟多个表的插入和查询数据的模拟,再通过基准测试脚本测试服务器性能和收集数据,仿真模拟. 备注: 如果需要基础的python环境,可以查看&l ...
- Python 基础语法(二)
Python 基础语法(二) --------------------------------------------接 Python 基础语法(一) ------------------------ ...
- Python学习之二:Python 与 C 区别
引自http://www.lxway.com/181844.htm 从开始看Python到现在也有半个多月了,前后看了Python核心编程和Dive into Python两本书.话说半个月看两本,是 ...
- Python/MySQL(二、表操作以及连接)
Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...
- python下实现二叉堆以及堆排序
python下实现二叉堆以及堆排序 堆是一种特殊的树形结构, 堆中的数据存储满足一定的堆序.堆排序是一种选择排序, 其算法复杂度, 时间复杂度相对于其他的排序算法都有很大的优势. 堆分为大头堆和小头堆 ...
- python 小数据池,is and "==",decode ,encode
一:小数据池 1.python运行中的缓存: 2.目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 3.python 缓存数据:缓存:int, str, bool. ...
- Python爬虫利器二之Beautiful Soup的用法
上一节我们介绍了正则表达式,它的内容其实还是蛮多的,如果一个正则匹配稍有差池,那可能程序就处在永久的循环之中,而且有的小伙伴们也对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Be ...
- 【转】Python之数据序列化(json、pickle、shelve)
[转]Python之数据序列化(json.pickle.shelve) 本节内容 前言 json模块 pickle模块 shelve模块 总结 一.前言 1. 现实需求 每种编程语言都有各自的数据类型 ...
随机推荐
- 如何优雅的爬取 gzip 格式的页面并保存在本地(java实现)
1. 引言 在爬取汽车销量数据时需要爬取 html 保存在本地后再做分析,由于一些页面的 gzip 编码格式, 获取后要先解压缩,否则看到的是一片乱码.在网络上仔细搜索了下,终于在这里找到了一个优雅的 ...
- win8.1 pro-64位下安装配置MinGW—64位
1.下载MinGW-w64位:http://mingw-w64.org/doku.php 点击Downloads 说明:这边使用的是在线安装方式: 在网站里可以看到他安装后的文件夹: 2.安装 运行m ...
- 洛谷P4360 [CEOI2004]锯木厂选址(dp 斜率优化)
题意 题目链接 Sol 枚举第二个球放的位置,用前缀和推一波之后发现可以斜率优化 // luogu-judger-enable-o2 #include<bits/stdc++.h> #de ...
- Laravel 支付宝异步通知 419报错
支付宝在支付是有服务器通知和网页通知,一个在前端展示,一个在后台操作, laravel框架自带csrf_token验证. 所以我们需要把支付的路由跳过验证 可以在中间键的csrf配置中更改
- egg.js-基于koa2的node.js入门
一.Egg.JS 简介 Egg.JS是阿里开发的一套node.JS的框架,主要以下几个特点: Egg 的插件机制有很高的可扩展性,一个插件只做一件事,Egg 通过框架聚合这些插件,并根据自己的业务场景 ...
- 原生爬虫小Demo
import re from urllib import request class Spider(): url = 'https://www.panda.tv/cate/lol' #[\s\S]匹配 ...
- Andoid多语言国际化策略
目前手上的项目,为了普及覆盖更多的用户群,也已经开始实现了多语言设置这样的功能,不过今天我要说的不是微信,而是我们自己项目中的实现策略. 直接附上关键代码: package com.huolonglu ...
- 多张报表导出到一个多sheet页excel
业务需求: 通过勾选不同的报表名称,然后直接执行导出excel.并且这些报表需要统一导入到一个excel的多个sheet页中,并且对某些报表可能需要增加一些类似'已审核'之类的图片(展现时并没有 ...
- mysql 安装版
安装 1.MySQL的安装类型选择: 在“Choose Setup Type”对话框有“Typical”默认安装类型:“complete"完全安装类型:Custom自定义安装类型. 我们选择 ...
- oracle 闪回功能详解
Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...