一、PDF模块

  使用PyPDF2模块

pip install PyPDF2

1.1 从PDF读取数据

  直接读取,并打印出来。但是这种打印存在一个问题,不能中文字符

import PyPDF2
import os pdf_obj = open('de8ug.pdf', 'rb') # 使用二进制方式打开,生成一个文件对象
pdf = PyPDF2.PdfFileReader(pdf_obj) # 把文件对象传入到pdfread中
print(pdf.numPages) # 获取pdf的页数 page = pdf.getPage(1) # 获取PDF某一页内容,生产一个对象
print(page.extractText()) # 打印出来,但是存在一个问题,不能显示中文

  解决中文字符的问题

import os
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
                    # 资源管理      # 运行过程
from pdfminer.converter import TextConverter # 文本转换
from pdfminer.layout import LAParams # 布局
from io import StringIO         # 临时文件 def convert_pdf(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams() device = TextConverter(rsrcmgr, retstr, laparams=laparams) # 把几个对象传入进来,生产文本转换对象
fp = open(path, 'rb')
process_pdf(rsrcmgr, device, fp) # 转换的过程,转移到临时文件中
fp.close()
device.close()
out = retstr.getvalue() # 直接到临时文件中读取数据
retstr.close()
return out

s = convert_pdf('de8ug.pdf')
s.split('\n\x0c')   # 每一页都是根据这个进行分割的

1.2  写入PDF

  从某一个PDF中获取某一页写入到新的一个PDF中

import PyPDF2

pdf_writer = PyPDF2.PdfFileWriter()  # 先生成一个写对象

# 生成一个读对象,并获取指定某一页码
pdf_obj = open('de8ug.pdf', 'rb')
pdf = PyPDF2.PdfFileReader(pdf_obj)
page = pdf.getPage(1) # 在写对象中加入这一夜
pdf_writer.addPage(page) # 打开一个文件,写入内容
with open('lh-1.pdf', 'wb') as f:
pdf_writer.write(f)
pdf_obj.close()

1.3 PDF 加密与解密

  加密

with open('debug.pdf', 'rb') as f:
# 打开需要加密文件,使用文件对象生成一个PDF_read对象
pdf_read = PyPDF2.PdfFileReader(f)
# 生成一个pdf写对象
pdf_write = PyPDF2.PdfFileWriter() # 循环每一页,把read对象中的每一页,加入到write对象中
for page in range(pdf.numPages):
pdf_write.addPage(pdf.getPage(page)) # 对read对象进行加密
pdf_write.encrypt('hilouhui') # 直接写入到文本中
with open('lh-en.pdf', 'wb') as f2:
pdf_write.write(f2)

  解密:

import PyPDF2

with open('lh-en.pdf', 'rb') as f:
pdf_read = PyPDF2.PdfFileReader(f) print(pdf_read.isEncrypted) # 判读是否加密,这个只是read对象的方法
pdf_read.decrypt('hilouhui') # 解密
# print(pdf_read.getPage(1).extractText())
page = pdf_read.getPage(1)
print(page.extractText())

1.4  加水印

  加水印的原理其实就是多个pdf的合并

import PyPDF2
with open('de8ug.pdf', 'rb') as f_in:
with open('water.pdf', 'rb') as f_out:
# 打开两个pdf 对对象:
pdf_in = PyPDF2.PdfFileReader(f_in)
pdf_out = PyPDF2.PdfFileReader(f_out)
# 打开一个写的PDF对象
pdf_write = PyPDF2.PdfFileWriter() # 里面那层每一页读取出来,实用水印页进行合并。在写到pdf_write中
for page_num in range(pdf_in.numPages):
page = pdf_in.getPage(page_num)
page.mergePage(pdf_out.getPage(0)) # 对每一页进行合并
pdf_write.addPage(page) # 写入文件
with open('de8ug-water.pdf', 'wb') as f:
pdf_write.write(f)

1.4 将数据导出为PDF格式

import datetime  # 导入日期时间库
import reportlab.pdfbase.ttfonts # 导入reportlab的注册字体 reportlab.pdfbase.pdfmetrics.registerFont(
reportlab.pdfbase.ttfonts.TTFont('song', 'C:\WINDOWS\Fonts\simsun.ttc')) # 注册字体,linux和windowns不同 from reportlab.pdfgen import canvas
from reportlab.lib.units import inch # 导入单位英寸 def create_pdf(input, output="disosi.pdf"):
now = datetime.datetime.today()
date = now.strftime("%h %d %Y %H:%M:%S") # 设定日期格式
c = canvas.Canvas(output)
c.setFont('song', ) # 设置字体字号
textobject = c.beginText() # 定义开始
textobject.setTextOrigin(inch, * inch) # 定义位置
textobject.textLines('''LH备忘录: %s ''' % date) # 输出标题 for line in input: # 通过循环的方式一行一行写入文件
textobject.textLine(line.strip()) # 写入文件 c.drawText(textobject)
c.showPage()
c.save() def main():
report = ['我是娄辉', '你呢', '我很帅']
create_pdf(report) if __name__ == '__main__':
main()

二、 Excel  表格操作

python操作excel使用openpyxl这个模块,其中有三个对象:

    • workbook  工作簿,一个excle文件
    • sheet     表格,一个excle文件中包含多个表格
    • cell     单元格

excel的操作的情景:

  1. 打开或者创建一个Excel需要创建一个Workbook对象
  2. 获取一个表则需要先创建一个Workbook对象,然后使用该对象的方法来得到一个Worksheet对象
  3. 如果要获取表中的数据,那么得到Worksheet对象以后再从中获取代表单元格的Cell对象

2.1 三个对象操作

2.1.1 workbook对象

打开与 保存方法:

import openpyxl
wb = openpyxl.load_workbook('de8ug.xlsx') # 打开文件,加载到wb的内存处
wb.save('lh.xlsx') # 保存成另外一个文件
import openpyxl
wb = openpyxl.load_workbook('de8ug.xlsx') wb.active # 获取当前活跃的sheet,默认打开第一张活跃
wb.sheetnames # 获取所有的表名
wb.worksheets # 以列表的方式返回所有的worksheet对象 wb.get_sheet_by_name('表名') # 获取一个表对象。但是这种方法现在不用了
wb['name'] # 使用这种方法获取表对象 wb.read_only # 判断是否只读
wb.encoding # 获取字符编码
wb.properties # 获取文件的信息,编码,时间,创建者等等 wb.get_sheet_names # 获取所有表格的名称(新版已经不建议使用,通过Workbook的sheetnames属性即可获取)
get_sheet_by_name # 通过表格名称获取Worksheet对象(新版也不建议使用,通过Worksheet[‘表名‘]获取)
get_active_sheet # 获取活跃的表格(新版建议通过active属性获取)
remove_sheet # 删除一个表格
create_sheet # 创建一个空的表格
copy_worksheet # 在Workbook内拷贝表格

2.1.2 worksheet对象  表对象

# 属性
title:       表格的标题
dimensions:    表格的大小,这里的大小是指含有数据的表格的大小,即:左上角的坐标:右下角的坐标
max_row:      表格的最大行
min_row:      表格的最小行
max_column:   表格的最大列
min_column:   表格的最小列
rows:       按行获取单元格(Cell对象) - 生成器
columns:     按列获取单元格(Cell对象) - 生成器
freeze_panes:   冻结窗格
values:      按行获取表格的内容(数据) - 生成器 # 方法
iter_rows:       按行获取所有单元格,内置属性有(min_row,max_row,min_col,max_col)
iter_columns:     按列获取所有的单元格
append:        在表格末尾添加数据
merged_cells:     合并多个单元格
unmerged_cells:   移除合并的单元格

2.1.3 cell对象  单元格对象

  cell对象的方法比较简单:

    获取单元格对象的两种方式:

      sh1 ['a1']

      sh1.cell(row=1, column=2)

row:      单元格所在的行
column:    单元格坐在的列
value:     单元格的值,可以直接获取。 cell1.value = '改变的值' 也可以 cell1 = '改变的值'
coordinate:  单元格的坐标

2.1.4 函数 与  单元格样式

  添加函数其实就是  添加字符串,加上去后,让excel自动解析:

  例如: =AVERAGE(B2:B8)

 

单元格样式:

from openpyxl.styles import Font # 内置很多种样式
font = Font(bold=True, size=20) # 字体样式有很多方法
sh2['B7'].font = font

2.2 一些小case

import openpyxl

wb = openpyxl.load_workbook('de8ug.xlsx')
sh1 = wb.active
sh2 = wb['Sheet2'] sh2['a1'] = '名字'
sh2['b1'] = '分数大于75'
index = 2
for row in sh1.rows: # 利用rows的生成器对象
# print(row)
# print(row[0].value,row[1].value)
if row[0].coordinate != 'A1' and row[1].value > 75:
sh2['A' + str(index)] = row[0].value
sh2['B' + str(index)] = row[1].value
index += 1 wb.save('111111111111.xlsx')

挑选出分数大于75

import openpyxl

wb = openpyxl.load_workbook('de8ug.xlsx')

sh1 = wb['成绩表']
sh2 = wb['Sheet2']
index = 2
for row in range(2, sh1.max_row+1):
grade = sh1.cell(row=row, column=2).value
if grade > 75:
sh2['A' + str(index)] = sh1.cell(row=row, column=1).value
sh2['B' + str(index)] = grade
index += 1 wb.save('22222.xlsx')

   

  

office套件的更多相关文章

  1. 如何设置和使用MacOS上的Microsoft Office套件

    自30年前首次发布以来,Microsoft Office已成为全球最受欢迎的生产力套件之一.借助Word和Excel for Mac之类的程序,毫无疑问,MS Office套件在任何计算机上都是必须下 ...

  2. 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 富文本编辑器 万里长征 ...

  3. 从零开始, 开发一个 Web Office 套件 (2): 富文本编辑器

    书接前文: 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Of ...

  4. 从零开始, 开发一个 Web Office 套件 (3): 鼠标事件

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...

  5. 从零开始, 开发一个 Web Office 套件(4):新的问题—— z-index

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...

  6. 《从零开始, 开发一个 Web Office 套件》系列博客目录

    这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office 套件, 包括: 文档, 表格, 幻灯片... 等等. 对应的Github r ...

  7. 从零开始,开发一个 Web Office 套件(5):Mouse hover over text

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Office ...

  8. 从零开始,开发一个 Web Office 套件(6):光标 & Click 事件

    <从零开始, 开发一个 Web Office 套件>系列博客目录 这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office ...

  9. 从零开始,开发一个 Web Office 套件(7):新的问题—— Click 事件的 z-index

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  10. 从零开始,开发一个 Web Office 套件(9):拖动鼠标选中文字 Edge Case

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

随机推荐

  1. SQL Server创建视图——视图的作用

    视图简介: 视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口. 常规视图本身并不存储实际的数据,而仅仅是由SELECT语句组成的查询定义的虚拟表 . ...

  2. Spring MVC 复习笔记02

    1. 非注解的处理器映射器和适配器 1.1 非注解的处理器映射器 处理器映射器:org.springframework.web.servlet.handler.BeanNameUrlHandlerMa ...

  3. Linux远程管理器xshell和xftp使用教程,以及遇到关闭Xshell后项目也停止的解决方法

    1.xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议. 2.是一个基于 MS windows 平台的功能强大的 ...

  4. JS答辩习题

    php高中班javascript答辩题目 1 什么是javascript?  答:Javascript是一种专门设计用来增强网页交互性的脚本语言,它也是一种解释型语言. 2 Javascript与C语 ...

  5. Linux Shell脚本编程--字符串截取

    Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...

  6. web.xml servlet、servlet-mapping配置

    Servlet常称为服务器端小程序,即运行在服务器端的程序,用于处理及响应客户的请求. Servlet类是个特殊的java类,继承于HttpServlet. --------------------- ...

  7. 20145312 实验五《Java网络编程》

    20145312 实验五<Java网络编程> 一. 实验内容及要求 实验内容: 运行下载的TCP代码,结对进行,一人服务器,一人客户端: 利用加解密代码包,编译运行代码,一人加密,一人解密 ...

  8. 20145322《Java程序设计》第4次实验报告

    实验内容 1.搭建Android环境 2.运行Android 3.修改代码并输出自己的学号 实验步骤 搭建Android环境 安装Android,核心是配置JDK.SDK 运行Android 最终结果 ...

  9. 斜率优化dp学习

    用了一堂半的课才彻底搞懂.其他神犇写的博客或多或少有点小bug,所以orzzz不才斗胆重新写一个. 里面大量穿用其他神犇的原话,就不逐一标明出处了. 引用资料 Accept的博客 MathonL的博客 ...

  10. 解题报告:hdu1257 LIS裸题

    2017-09-02 17:28:44 writer:pprp 那个裸题练练手,讲解在之前的博客中提到了 代码如下: /* @theme:hdu1257 @writer:pprp @begin:17: ...