处理PDF文件

PyPDF2简介

作为 PDF 工具包构建的纯 python 库。 它可以:

提取文档信息(标题,作者,... ...)

一页一页地分割文件

一页一页地合并文件

裁剪页面

将多个页面合并成一个页面

加密和解密 PDF 文件

通过使用纯 Python,它应该在任何 Python 平台上运行,而不需要依赖外部库。 它也可以完全使用 StringIO 对象而不是文件流,允许内存中的 PDF 操作。 因此,对于管理或操作 pdf 文档的网站来说,它是一个有用的工具。

importcodecsimportPyPDF2importos

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 innewFiles:

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 importImage

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 importImage

image= Image.open("test.jpg")

cutjpg= image.crop((320, 65, 460, 220))

cutjpg.show()

结果如下:

把头像翻转180度

from PIL importImage

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 importImage

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= 30newy= int(y*newx/x)

newimage=image.resize((newx, newy))

newimage.show()

结果如下:

生成验证码

importrandomimportstringfrom PIL importImage, 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

#生成一个随机字符串

defgetNumber():

source= list(string.ascii_letters) +list(string.digits)return "".join(random.sample(source, number))#绘制干扰线

defgetLine(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)defgetCode():

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) #填充字符串

ifdraw_line:for i inrange(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处理数据(二)相关推荐

  1. python建立数据库并序列化_Python之数据序列化(json、pickle、shelve)

    一.python类型数据和JSON数据格式互相转换 pthon 中str类型到JSON中转为unicode类型,None转为null,dict对应object 二. 序列化/反序列化 将对象转换为可通 ...

  2. python提取数据段_python提取数据段 python数据分析

    如何在python中用slice分段取数据? 执行以下操作:&gt&gt a=range(6)&gt&gt a[0, 1, 2, 3, 4,5]&gt& ...

  3. python监控服务器信息进行可视化_Python实现数据可视化,看如何监控你的爬虫

    好,开始今天的文章. 今天主要是来说一下怎么可视化来监控你的爬虫的状态. 相信大家在跑爬虫的过程中,也会好奇自己养的爬虫一分钟可以爬多少页面,多大的数据量,当然查询的方式多种多样.今天我来讲一种可视化 ...

  4. python数据预处理_Python数据分析——数据预处理的方法

    前言 1. 关于数据集 数据来源:日月光华老师的<Python数据分析从入门到机器学习>的 lianjia 数据. 数据概况: cjtaoshu:成交套数 mendian:门店 cjzon ...

  5. python数据分列_Python pandas 数据无法正常分列

    在数据处理时,有时需要对数据进行分列,类似于Excel里面的分列功能,这个在pandas里面也可以实现,下面就来详细介绍相关的方法及注意点,前提是你已经对pandas有一定的了解 导入数据 这里介绍的 ...

  6. python处理csv文件缺失值_python处理数据中缺失值

    (1)直接删除法(当缺失值个数只占整体很小一部分时) 在采用删除法处理缺失值时,需要首先检测样本总体中确实值得的个数.python中统计缺失值的方法为: import numpy as np impo ...

  7. python序列类型映射类型_Python的数据访问模型与序列介绍

    前面小节介绍了 Python 的 Dict 字典类型,这只是 Python 众多数据类型的其中一个.那么接下来在这个小节里,我们看看 Python 还有哪些数据类型. Python的数据访问模型:直接 ...

  8. python 数据去重_python 对数据常用的几种去重方式

    一.对列表去重 1.用循环查找的方式 li = [1,2,3,3,4,2,3,4,5,6,1] news_li = [] for i in li: if i not in news_li: news_ ...

  9. python建立数据库并序列化_python之数据的序列化

    参考博客:http://www.cnblogs.com/yyds/p/6563608.html 数据的序列化功能表 json.dumps() 将python数据类型转换为(json)字符串 json. ...

  10. python文件可以包括任何数据内容_python 文件数据合并(数据行不对应)?

    这里我们讨论如何利用concat方法进行简单的数据拼接. import pandas as pd ser1 = pd.Series(['A','B','C'], index=[1,2,3]) ser2 ...

最新文章

  1. 软件安装——internal error2503/2502
  2. [codeforces] 527A Playing with Paper
  3. 百度超级链XChain(7)数据模型
  4. 趣学python3(25)-del,deepcopy以及内存引用计数
  5. iOS四种多线程(swift和oc)
  6. Earliest PEP Algorithm Principles
  7. 如何求matlab的in(2.0375),matlab2012年课后习题及答案详解
  8. 网站访问量怎么刷_基于爬虫刷新某网站访问量!我说怎么上千万呢
  9. 《学习OpenCV》课后习题解答(第三章)(仅供参考)
  10. 什么是服务网格(Service Mesh)
  11. 算法不会,尚能饭否之排序——直接选择排序
  12. 开源中国翻译频道链接收藏
  13. [转载]Qt之获取本机网络信息_vortex_新浪博客
  14. android开源数据库,Android Hawk数据库 github开源项目
  15. linux安装oracle11g视频,Linux安装oracle11g详细步骤及问题汇总
  16. 725.分隔链表(力扣leetcode) 博主可答疑该问题
  17. C语言结构体所占用的字节数如何计算
  18. 云服务器安全配置开放哪些端口
  19. 电脑硬件软件相关知识
  20. 让你的Win10桌面比macOS还简洁漂亮高大上

热门文章

  1. 医疗健康数据安全合规论坛召开 落实合规提升数据安全水平
  2. java 文件下载浏览器没有弹出下载框
  3. 0基础学python第一天:认识python,安装python,输出第一个程序
  4. Python时间与日期操作(datetime、time、calendar)
  5. (1)对控制理论的理解
  6. toml 格式文件解析
  7. php繁殖静态黑页程序,原创黑页
  8. 浪潮之巅第五章 — 奔腾的芯(英特尔—Intel)
  9. ABB机器人socket通讯
  10. 7-12 查验身份证