PDF文件操作
- 导入三方库
import PyPDF2
读取操作
- 以读的方式打开pdf文件获取pdf文件对象
pdf1 = PyPDF2.PdfFileReader('被打开的pdf文件路径')
- 获取pdf文件总页数
total_page = pdf1.getNumPages()
print(total_page)
- 获取指定页面对象
# pdf文件对象.getPage(页数)
page1 = pdf1.getPage(1)
- 旋转
page1_1 = page1.rotateClockwise(90) # 旋转
# page1_2 = page1.scale(100, 200) # 缩放
写操作
- 创建一个空的pdf文件对象
# PyPDF2.PdfFileWriter()
pdf_write = PyPDF2.PdfFileWriter()
- 添加页面
# pdf文件对象.addPage(页面对象) - 添加指定页
# pdf文件对象.addBlankPage() - 添加空白页
pdf_write.addPage(page1)
pdf_write.addBlankPage()
保存pdf文件
f = open('将要保存的pdf文件路径', 'wb')
pdf_write.write(f)
pdf文件合并
import PyPDF2
def marge(pdf1: str, pdf2: str, out):
pdf1 = PyPDF2.PdfFileReader(pdf1)
pdf2 = PyPDF2.PdfFileReader(pdf2)
total_page1 = pdf1.getNumPages()
total_page2 = pdf2.getNumPages()
pdf_out = PyPDF2.PdfFileWriter()
for num in range(total_page1):
pdf_out.addPage(pdf1.getPage(num))
for num in range(total_page2):
pdf_out.addPage(pdf2.getPage(num))
f = open(out, 'wb')
pdf_out.write(f)
marge('pdf文件路径1', 'pdf文件路径2', '输出的pdf文件路径')
添加水印
创建水印文件
- 导入三方库
import PyPDF2
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas
- 注册字体文件
pdfmetrics.registerFont(TTFont('自定义的字体名', '字体文件路径'))
- 创建空的pdf文件
walter_pdf = canvas.Canvas('将要创建的水印文件路径')
- 设置字体
walter_pdf.setFont('自定义的字体名', 40)
- 设置文字颜色
walter_pdf.setFillColor((0.5, 0.5, 0.5), 0.5)
- 文字旋转
walter_pdf.rotate(45)
- 渲染文字内容
walter_pdf.drawString(400, 250, '水印文字内容')
- 保存
walter_pdf.save()
添加水印
- 准备需要添加水印的pdf
reader1 = PyPDF2.PdfFileReader('被添加水印的文件路径')
- 准备水印文件
watermark = PyPDF2.PdfFileReader('水印文件路径').getPage(0)
- 准备空的pdf用来存放添加完水印的页
new_pdf = PyPDF2.PdfFileWriter()
- 遍历原文件每一页,添加水印后存到空的pdf文件中
for page_num in range(reader1.getNumPages()):
page = reader1.getPage(page_num)
page.mergePage(watermark)
new_pdf.addPage(page)
- 保存新的pdf
f = open('添加水印后新文件的路径', 'wb')
new_pdf.write(f)
Excel文件读写操作
- 导入三方库
import openpyxl
import os
读操作
- 加载文件
wb = openpyxl.load_workbook('files/DSP.xlsx')
- 获取所有工作表的表名
names = wb.sheetnames
print(names)
- 获取活跃表(保存时选中的那张表)
sheet1 = wb.active
print(sheet1)
- 获取指定表 - 工作簿对象[表名]
sheet2 = wb['效率计算总表']
print(sheet2)
- 获取表名
# 工作表对象.title
print(sheet1.title)
- 获取最大行数与最大列数
print(sheet1.max_row) # 最大行数
print(sheet1.max_column) # 最大列数
- 获取指定单元格对象与单元格内容
# 工作表['单元格坐标'] - 获取指定位置对应的单元格的对象
# 单元格对象.value
cell1 = sheet1['A1']
print(cell1.value)
# 工作表.cell(行号,列号) - 获取指定位置对应单元格对象(列号转换成数字)
cell2 = sheet1.cell(1, 1)
print(cell2.value)
# 练习:获取整个表中所有的单元格中的内容
for row in range(1, sheet1.max_row + 1):
for col in range(1, sheet1.max_column + 1):
print(sheet1.cell(row, col).value, end=' ')
print()
# 练习: 获取第2行所有内容
for col in range(1, sheet1.max_column + 1):
print(sheet1.cell(2, col).value, end=' ')
print()
# 练习:获取第3列所有内容
for row in range(1, sheet1.max_row + 1):
print(sheet1.cell(row, 3).value, end=' ')
写操作
-
注意:excel所有的写操作,如果要有效,必须在操作完成后对excel文件对应的工作簿
-
新建工作簿对象
if os.path.exists('files/test.xlsx'): # 判断文件是否存在
print('打开')
wb = openpyxl.load_workbook('files/test.xlsx')
else:
print('新建')
wb = openpyxl.Workbook()
wb.save('files/test.xlsx')
- 保存工作簿
# 工作簿对象.save(文件路径)
wb.save('files/test.xlsx')
- 在工作簿对象中新建表
# 工作簿对象.create_sheet(表名, 位置)
# 位置:默认是添加在最后,表名位置是可以看作是一个列表,默认是在-1位置添加。
wb.create_sheet('老师表', 0)
- 删除表
# 工作簿对象.remove(表对象)
# 异常捕获作用:有这张表就删除 没有该表报错后继续执行不影响程序
# try:
# wb.remove(wb['老师表1'])
# except KeyError:
# pass
- 修改表名
# 表对象.title = 新的表名
if 'Sheet' in wb.sheetnames:
wb['Sheet'].title = '课程表'
- 修改单元格中的内容
# 表对象['列号行号'] = 数据
# 单元格对象.value = 数据
sheet1 = wb.active
sheet1['A1'] = '姓名'
sheet1.cell(1, 2).value = '年龄'
# 练习:将列表中所有的数据添加到课程表的第3行:['Python', '余婷', '5个月', 10000]
data = ['Python', '余婷', '5个月', 10000]
for col, data1 in enumerate(data):
sheet1.cell(3, col + 1).value = data1
CSV文件操作
- 导入第三方库
import csv
- 创建reader对象
# 返回值是包含每行文件内容的迭代器
# csv.reader(文件路径) - 读数据的时候每一行内容对应一个列表
# csv.DictReader(文件路径) - 读数据的时候每一行是一个字典
f = open('files/2018年北京积分落户数据.csv', encoding='utf-8')
reader = csv.DictReader(f)
- 创建文件对应的witer对象并写入内容
# 创建对象 - csv.writer(文件对象)
f = open('files/test.csv', 'w', encoding='utf-8')
writer = csv.writer(f)
# 写入数据 - writer.writerow() - 一次写入一行
writer.writerow(['name', 'age', 'score', 'gender'])
# 写入数据 - writer.writerows() - 一次写入多行
writer.writerows(
[['小明', '18', '100', '男'],
['小花', '20', '99', '女'],
['小黑', '18', '100', '男']]
)
# csv.DictWriter(文件对象)
f = open('files/test2.csv', 'w', encoding='utf-8')
writer = csv.DictWriter(f, ['name', 'age', 'score', 'gender'])
writer.writeheader()
writer.writerow({'name': '小明', 'age': 18, 'score': 87, 'gender': '男'})
- 练习:将Excel文件内容读取写入到csv
wb = openpyxl.load_workbook('files/小宝剑大药房.xlsx')
sheet1 = wb.active
f = open('files/xiaobaojian.csv', 'a', encoding='utf-8', newline='')
writer = csv.writer(f)
tmp = []
for row in range(1, sheet1.max_row + 1):
for col in range(1, sheet1.max_column + 1):
tmp.append(sheet1.cell(row, col).value)
writer.writerow(tmp)
tmp.clear()