Day020 - pdf合并与excel/csv读取写入

本文详细介绍了如何使用Python进行PDF文件的读取、旋转、合并及添加水印操作,以及Excel文件的读写,包括获取单元格内容、修改数据等。此外,还涵盖了将Excel数据写入CSV文件的方法,为日常文档处理提供了实用的代码示例。
摘要由CSDN通过智能技术生成

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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值