1.Python 修改excel文件
import xlrd
import xlutils.copy
excelr = xlrd.open_workbook("hello.xlsx")
excelw = xlutils.copy.copy(excelr)
sheet1 = excelw.get_sheet(0)
sheet1.write(3, 5, "xlutils.copy test test")
excelw.save("hello.xlsx") # 这里如果名称不变,则覆盖原文件,如果名称改变,则生成新名称的文件。#所以,由上代码可以分析出,如果文件原本就存在,而你要修改它,不能直接使用xlwt,必须使用 xlutils.copy 方法复制一份出来再修改,最后保存或覆盖原文件。
#原表格内容

#改后表格内容

2. python 创建新的excel文件,指定标签页,并写入内容到应标签页内
import xlwt
excel = xlwt.Workbook("hello.xlsx")
sheet1 = excel.add_sheet("sheet5")
sheet2 = excel.add_sheet("sheet2")
sheet3 = excel.add_sheet("sheet3")
sheet1.write(0,0,"hello world")
sheet2.write(1,0,"hello")
sheet3.write(2,0,"test test")
excel.save("hello1.xlsx")执行结果:

打开hello1.xlsx

3.处理pdf文件
(1) 读取pdf文件
python3 安装 pdfminer3k
# pip install pdfminer3kfrom pdfminer.pdfparser import PDFParser,PDFDocument
from pdfminer.pdfparser import PDFPage
from pdfminer.pdfinterp import PDFResourceManager,PDFTextExtractionNotAllowed
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfdevice import PDFDevice
from pdfminer.layout import LAParams
from pdfminer.converter import PDFPageAggregator
#获取文档对象,你把algorithm.pdf换成你自己的文件名即可。
fp=open("C:\\Users\\Shinelon\\PycharmProjects\\Python3\\datachuli\\aminglinux\\chapter1.pdf","rb")
#创建一个与文档相关联的解释器
parser=PDFParser(fp)
doc=PDFDocument()
parser.set_document(doc)
doc.set_parser(parser)
#PDF文档对象,提供密码初始化,没有就不用带password参数。
doc.initialize()
#检查文件是否允许文本提取
if not doc.is_extractable:
raise PDFTextExtractionNotAllowed
#链接解释器和文档对象
#parser.set_document(doc)
#doc.set_paeser(parser)
#初始化文档
#doc.initialize("")
#创建PDF资源管理器对象来存储共享资源
resource=PDFResourceManager()
#参数分析器
laparam=LAParams()
#创建一个聚合器
device=PDFPageAggregator(resource, laparams=laparam)
#创建PDF页面解释器
interpreter=PDFPageInterpreter(resource,device)
#使用文档对象得到页面集合
for page in doc.get_pages():
#使用页面解释器来读取
interpreter.process_page(page)
#使用聚合器来获取内容
layout=device.get_result()
for out in layout:
if hasattr(out, "get_text"):
print(out.get_text())(2)合并多个pdf文件为一个pdf文件
安装pypdf2
# pip install pypdf2import PyPDF2
import os
# 建立一个装pdf文件的数组
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"""这种方法获取的文件名列表是按照ascii码排序的,例如:chapter1.pdf,chapter10.pdf,chapter11.pdf...以此类推"""
# for fileName in os.listdir(r'C:\Users\Shinelon\PycharmProjects\Python3\datachuli\aminglinux'): # 遍历该程序所在文件夹内的文件
# if fileName.endswith('.pdf'): # 找到以.pdf结尾的文件
# pdfFiles.append(fileName) # 将pdf文件装进pdfFiles数组内
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"""这种方式可以采用,但是应该还有更好的方法,再想想"""
pdfFiles = []
for i in range(1, 27):
pdfFiles.append("chapter{0}.pdf".format(i))
os.chdir(r"C:\Users\Shinelon\PycharmProjects\Python3\datachuli\aminglinux")
pdfWriter = PyPDF2.PdfFileWriter() # 生成一个空白的pdf文件
for pdf in pdfFiles:
pdfReader = PyPDF2.PdfFileReader(open(pdf, 'rb')) # 以只读方式依次打开pdf文件
for pageNum in range(pdfReader.numPages):
print(pdfReader.getPage(pageNum))
pdfWriter.addPage(pdfReader.getPage(pageNum)) # 将打开的pdf文件内容一页一页的复制到新建的空白pdf里
pdfOutput = open('combine.pdf', 'wb') # 生成combine.pdf文件
pdfWriter.write(pdfOutput) # 将复制的内容全部写入combine.pdf
pdfOutput.close()3.Python 处理图片
图像处理是一门应用非常广泛的技术,而拥有非常丰富第三方扩展库的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/
直接使用
pip install pillow也可以安装模块
导入时使用 from PIL import Image
简单例子:
from PIL import Image
image = Image.open("img.jpg")
print (image.format, image.size, image.mode)
image.show()结果:
JPEG (580, 326) RGB
并把图片打开,展示出来
由上例子可以知道:
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的几何处理:
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("img.jpg")
print(image.format, image.size, image.mode)
box = (170, 0, 390, 260)
region = image.crop(box)
region.save("cutting.jpg")抠取过程:

解释:上述代码将图片的((170, 0), (170, 260), (390, 0), (390, 260))所画出来的区域进行裁剪,并保存在cutting.jpg中
结果L:

史上最强驱逐舰,大家一起来感受一下~_(:3 」∠)_
例子2:图片拼合
将图片抠出来,旋转180度后,在贴回图片上
from PIL import Image
image = Image.open("img.jpg")
print(image.format, image.size, image.mode)
box = (170, 0, 390, 260)
egion = image.crop(box)
egion.save("cutting.jpg")
region = egion.transpose(Image.ROTATE_180)
image.paste(region, box)
image.show()效果:

例子3:缩放
from PIL import Image
infile = "img.jpg"
outfile = "img2.jpg"
image = Image.open(infile)
(x, y) = image.size
newx = 300 #缩小尺寸
newy = int(y*newx/x)
out = image.resize((newx, newy), Image.ANTIALIAS)
out.show()
out.save(outfile)对比一下:

缩放图:

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