day20-自动化办公2

excel文件的读操作

1.加载文件(只能加载后缀是.xlsx文件)

wb = openpyxl.load_workbook(‘files/上架商品.xlsx’)

2.从工作薄中获取工作表相关信息

1)获取所有工作表的表名

names = wb.sheetnames
print(names)  # ['Sheet1', 'Sheet2', 'Sheet3']

2)获取活跃表

sheet1 = wb.active
print(sheet1)  # <Worksheet "Sheet1">

3)根据表名获取指定表

1)获取表名:工作表对象.title

print(sheet1.title)  # 'Sheet1'

2)获取最大行数

print(sheet1.max_row)

3)获取最大列数

print(sheet1.max_column)

4.通过表获取单元格

1)获取指定一个单元格

a.工作表[‘列号行号’] - 获取指定位置对应的单元格(列号是字母)

cell1 = sheet1['A2']
print(cell1)

b.工作表.cell(行号,列号) - 获取指定位置对应的单元格(列号是数字)

cell2 = sheet1.cell(2, 1)

2)获取单元格的内容

单元格对象.value

print(cell1.value)
print(cell2.value)

excel文件的写操作

import openpyxl
import os

注意:excel所有的写操作,如果要有效必须在操作完成后对excel文件对应的工作薄进行保存操作

1.新建工作薄

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')

2.保存工作薄

工作薄对象.save(文件路径)

wb.save('files/test.xlsx')

3.针对表的写操作

1)新建表:工作薄对象.create_sheet(表名,位置)

wb.create_sheet('老师表')
wb.save('files/test.xlsx')

wb.create_sheet('学生表', 0)
wb.save('files/test.xlsx')

2)删除表:工作薄对象.remove(表对象)

try:
    wb.remove(wb['老师表'])
except KeyError:
    pass

3)修改表的表名:表对象.title = 新表名

if 'Sheet' in wb.sheetnames:
    wb['Sheet'].title = '课程表'

4.修改单元格中的内容

表对象[‘列号行号’]=数据
单元格对象.value=数据

sheet1 = wb.active
sheet1['A1'] = '姓名'
sheet1['B1'] = '年龄'
sheet1['A1'] = ''  # 相当于删掉'姓名'

sheet1.cell(1, 2).value = 'Age'
print(sheet1.cell(1, 2).value)

练习:将列表中所有的数据添加到课程表的第3行:[‘Python’, ‘余婷’, ‘5个月’, 10000]

sheet2 = wb['课程表']
list1 = ['Python', '余婷', '5个月', 10000]
for index, item in enumerate(list1):
    sheet2.cell(3, index+1).value = item

wb.save('files/test.xlsx')

csv文件读操作

import csv
import openpyxl

1.创建reader对象

csv.reader(文件对象) - 读数据的时候每一行内容对应一个列表(返回值是包含文件每行内容的迭代器)
csv.DictReader(文件对象) - 读数据的时候每一行内容对应一个字典(返回值是包含文件每行内容的迭代器)

f = open('files/2018年北京积分落户数据.csv', encoding='utf-8')
# reader = csv.reader(f)
reader = csv.DictReader(f)

2)通过reader读数据

print(next(reader))
print(next(reader))

2.创建文件对应的writer对象

1)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([
    ['小明', 18, 100, '男'],
    ['小花', 18, 80, '女'],
    ['张三', 17, 98, '男']
])

2)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': 100, 'gender': '男'})

writer.writerows([
    {'name': '小明', 'age': 18, 'score': 100, 'gender': '男'},
    {'name': '小花', 'age': 18, 'score': 80, 'gender': '女'},
    {'name': '张三', 'age': 17, 'score': 98, 'gender': '男'}
])

练习

将《小宝剑大药房.xlsx》中数据读取到《小宝剑大药房.csv》中

import openpyxl, csv

def read_data():
    wb = openpyxl.load_workbook('files/小宝剑大药房.xlsx')
    sheet = wb.active
    m_row = sheet.max_row
    m_col = sheet.max_column
    all_data = []
    for row in range(1, m_row+1):
        data = []
        for col in range(1, m_col+1):
            value = sheet.cell(row, col).value
            data.append(value)
        all_data.append(data)
    return all_data


if __name__ == '__main__':
    writer = csv.writer(open('files/小宝剑大药房.csv', 'w', encoding='utf-8'))
    writer.writerows(read_data())

pdf文件操作

import PyPDF2

1.读操作 - 获取PDF文件内容

1)以读的方式打开pdf文件

reader = PyPDF2.PdfFileReader('files/HEU_KMS_Activator_v20.0.0用户使用手册.pdf')

2)获取总的页数

total_page = reader.getNumPages()
print(total_page)

3)获取指定页数(PageObject的对象)

# reader.getPage(页数)
page0 = reader.getPage(0)
page1 = reader.getPage(1)
page2 = reader.getPage(2)
page3 = page1.rotateClockwise(90)  # 旋转
# page4 = page1.scale(100, 200)  # 缩放
# page1.mergePage(page2)

2.写操作

1)创建空的pdf文件对象

# PyPDF2.PdfFileWriter() - 创建一个空的pdf文件对象
writer1 = PyPDF2.PdfFileWriter()

2)添加页面

# writer.addPage(页面对象)  -  添加指定页
# writer1.addBlankPage()  -  添加空白页
writer1.addPage(page0)
writer1.addBlankPage()
writer1.addPage(page1)
writer1.addBlankPage()
writer1.addPage(page2)
writer1.addBlankPage()

3)保存pfd文件

f = open('files/test.pdf', 'wb')
writer1.write(f)

练习

将《test4.pdf》拼接到《walter.pdf》后

import PyPDF2

# 1.打开文件
reader1 = PyPDF2.PdfFileReader('files/walter.pdf')
reader2 = PyPDF2.PdfFileReader('files/test4.pdf')
writer = PyPDF2.PdfFileWriter()

# 2.获取总页数
total1 = reader1.getNumPages()
total2 = reader2.getNumPages()

# 3.依次获取每一页写入新文件
for page_num in range(total1):
    writer.addPage(reader1.getPage(page_num))

for page_num in range(total2):
    writer.addPage(reader2.getPage(page_num))

# 4.保存文件
f = open('files/test3.pdf', 'wb')
writer.write(f)

添加水印

import PyPDF2

# 1.准备需要添加水印的pdf
reader1 = PyPDF2.PdfFileReader('files/存储引擎的讲解.pdf')

# 2.准备水印文件
walter_page = PyPDF2.PdfFileReader('files/demo1.pdf').getPage(0)

# 3.准备空的pdf,用来存放添加完水印的页
new_pdf = PyPDF2.PdfFileWriter()

# 4.遍历原文件的每页内容,添加水印后添加到空的pdf中
for page_num in range(reader1.getNumPages()):
    # 获取原文件的一页内容
    page = reader1.getPage(page_num)
    # 添加水印
    page.mergePage(walter_page)
    # 将新的页面添加到空的pdf中
    new_pdf.addPage(page)
# 5.保存新的pdf文件
f = open('files/test4.pdf', 'wb')
new_pdf.write(f)

创建文印文件

from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfgen import canvas

# 1.注册字体文件
pdfmetrics.registerFont(TTFont('Font1', 'files/Vera.ttf'))
pdfmetrics.registerFont(TTFont('Font1', 'files/青呱石头体.ttf'))

# 2.生成文字
# 1)创建空的pdf文件
walter_pdf = canvas.Canvas('files/walter.pdf')

# 2)设置字体
walter_pdf.setFont('Font1', 40)

# 3)设置字体颜色
walter_pdf.setFillColorRGB(1, 0, 0, 1)

# 4)旋转
walter_pdf.rotate(0)

# 5)渲染文字内容
walter_pdf.drawString(100, 100, 'hello world!')

# 6)保存
walter_pdf.save()
上一篇:C#调用excel-1


下一篇:一道有趣的golang排错题