第二十一天 CSV和PDF文件操作

import csv

1. 创建reader

1) csv.reader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个列表

2) csv.DictReader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个字典


reader1 = csv.reader(open('files/北京高档酒店价格分析.csv'))
reader2 = csv.DictReader(open('files/北京高档酒店价格分析.csv'))

2. 获取内容 - 获取迭代器中的元素

# print(next(reader1))        # ['\ufeff酒店名称', '地区', '地址', '卫生评分', '服务评分', '设施评分', '位置评分', '评价数', '装修时间', '房间类型', '房价', '经度', '纬度', '公司', '出行住宿', '校园生活']
# print(next(reader1))        # ['北京朗丽兹西山花园酒店', '海淀区', '海淀永丰路与北清路十字路口往南800米路南', '4.8', '4.8', '4.7', '4.4', '143', '2014', '豪华套间', '9970', '116.292419', '40.095804', '0', '0', '0']
#
# print(next(reader2))        # {'\ufeff酒店名称': '北京朗丽兹西山花园酒店', '地区': '海淀区', '地址': '海淀永丰路与北清路十字路口往南800米路南', '卫生评分': '4.8', '服务评分': '4.8', '设施评分': '4.7', '位置评分': '4.4', '评价数': '143', '装修时间': '2014', '房间类型': '豪华套间', '房价': '9970', '经度': '116.292419', '纬度': '40.095804', '公司': '0', '出行住宿': '0', '校园生活': '0'}
# 练习:打印每个酒店对应的平均评分
# 北京朗丽兹西山花园酒店  4.6
for x in reader2:
    score = (float(x['卫生评分']) + float(x['服务评分']) + float(x['设施评分']) +
             float(x['位置评分'])) / 4
    print(x['\ufeff酒店名称'], f'{score:.2f}')

import csv

1. 创建列表的writer

writer = csv.writer(open(‘files/学生信息.csv’, ‘w’, newline=’’))

2. 写入数据

writer对象.writerow(一行内容对应的列表)

writer对象.writerows(列表中的元素是每一行内容对应的小列表)

writer.writerow(['姓名', '性别', '年龄', '分数'])
writer.writerows([
    ['小明', '男', 18, 90],
    ['小花', '女', 20, 88]
])

3. 创建字典的writer

# csv.DictWriter(文件对象, 字典所有的键)
writer2 = csv.DictWriter(
    open('files/学生信息2.csv', 'w', newline='', encoding='utf-8'),
    ['姓名', '性别', '年龄', '分数']
)

4. 将数据写入文件

# 1) 将字典的键作为第一行内容写入csv文件中
writer2.writeheader()
# 2) 以字典的方式写入数据
writer2.writerow({'姓名': '小明', '年龄': 18,  '分数': 90, '性别': '男'})
writer2.writerows([
    {'姓名': '小花', '年龄': 20,  '分数': 88, '性别': '女'},
    {'姓名': '张三', '年龄': 28,  '分数': 76, '性别': '男'}
])

1.pdf读操作

from PyPDF2 import PdfFileReader, PdfFileWriter
# 1)创建reader: PdfFileReader(文件对象)
reader = PdfFileReader(open('files/美食分享.pdf', 'rb'))

# 2)获取总页数: reader对象.numPages
page_num = reader.numPages
print(page_num)

# 3)获取指定页:reader对象.getPage(页数)
# 页数从0开始
page1 = reader.getPage(0)
page2 = reader.getPage(1)

# 2. pdf文件写操作
# 1)创建writer
# 创建一个空白的pdf文件(一页内容都没有)
writer = PdfFileWriter()

# 2)添加页
# writer对象.addPage(页对象)  - 添加从别的pdf文件中获取到的页
writer.addPage(page1)

# 添加空白页
writer.addBlankPage()

# 3)保存数据
writer.write(open('files/new.pdf', 'wb'))

# 练习1:将两个pdf文件内容交叉合并
from PyPDF2 import PdfFileReader, PdfFileWriter

reader1 = PdfFileReader(open('files/存储引擎的讲解.pdf', 'rb'))
reader2 = PdfFileReader(open('files/美食分享.pdf', 'rb'))
page_num1 = reader1.numPages
page_num2 = reader2.numPages
writer = PdfFileWriter()
min_page = min(page_num1, page_num2)
max_page = max(page_num1, page_num2)
for x in range(min_page):
    writer.addPage(reader2.getPage(x))
    writer.addPage(reader1.getPage(x))
for x in range(min_page, max_page):
    writer.addPage(reader2.getPage(x))
writer.write(open('files/new.pdf', 'wb'))

水印添加

from PyPDF2 import PdfFileReader, PdfFileWriter

# 1. 准备水印文件和原文件
water_reader = PdfFileReader(open('files/watermark.pdf', 'rb'))
file_reader = PdfFileReader(open('files/存储引擎的讲解.pdf', 'rb'))
# 2. 水印对应的页
water_page = water_reader.getPage(0)
# 3.准备需要添加水印的页
page1 = file_reader.getPage(0)
# 4.合并水印页和需要添加水印的页
page1.mergePage(water_page)
# 5.准备空的pdf用来保存水印页
writer = PdfFileWriter()
writer.addPage(page1)
writer.write(open('files/new_存储引擎的讲解.pdf', 'wb'))

创建水印

from reportlab.pdfgen import canvas      # 提供pdf文件
from reportlab.pdfbase import pdfmetrics        # 注册字体
from reportlab.pdfbase.ttfonts import TTFont    # 提供字体对象

# 1. 注册字体
pdfmetrics.registerFont(TTFont('font1', 'files/bb.ttf'))
pdfmetrics.registerFont(TTFont('font2', 'files/dd.ttf'))

# 2. 创建空白pdf
pdf = canvas.Canvas('files/water.pdf')

# 3.渲染文字
# 1)设置字体
# setFont(字体名, 字体大小)
pdf.setFont('font1', 30)
# 2)设置文字颜色
# 计算机三原色:红、绿、蓝 (0~255)
# setFillColorRGB(r, g, b, 透明度)
# 注意:r、g、b的取值范围是0~1
#      透明度取值范围0~1
pdf.setFillColorRGB(1, 0, 0, 0.5)

# 旋转
pdf.rotate(45)

# 3)渲染文字(写字)
pdf.drawString(30, 20, 'YuTing')

# 123,104,238
pdf.setFont('font2', 50)
pdf.setFillColorRGB(123/255, 104/255, 238/255, 0.5)
pdf.rotate(90)
pdf.drawString(300, 200, '余婷')

# 4.保存文件
pdf.save()

作业

import os
from PyPDF2 import PdfFileReader, PdfFileWriter
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont


def set_watermark():
    pdfmetrics.registerFont(TTFont('font1', 'files/bb.ttf'))
    pdf = canvas.Canvas('files/water.pdf')
    pdf.setFont('font1', 30)
    pdf.setFillColorRGB(0, 1, 0, 0.5)
    pdf.rotate(45)
    pdf.drawString(50, 50, '天道酬勤')
    pdf.save()


def add_watermark():
    set_watermark()
    water_reader = PdfFileReader(open('files/water.pdf', 'rb'))
    os.mkdir('./files/new_pdfs')
    for file_name in os.listdir('./files/pdfs'):
        if file_name[-4:] == '.pdf':
            result = open('./files/pdfs/' + file_name, 'rb')
            file_reader = PdfFileReader(result)
            page_num = file_reader.numPages
            water_page = water_reader.getPage(0)
            empty = PdfFileWriter()
            for x in range(page_num):
                file_reader.getPage(x).mergePage(water_page)
                empty.addPage(file_reader.getPage(x))
                empty.write(open('files/new_pdfs/new_' + file_name, 'wb'))


add_watermark()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值