python对Excel和CSV及PDF操作

1.excel文件的读操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import openpyxl

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

wb = openpyxl.load_workbook('files/小宝剑大药房.xlsx')

# 2.从工作簿中获取工作表相关信息
# 1)获取所有工作表的表名

names = wb.sheetnames
print(names)

# 2)获取活跃表

sheet1 = wb.active
print(sheet1)

# 3)根据表名获取指定表
sheet2 = wb['Sheet1']
print(sheet2)

# 3.从工作表中获取相关内容
# 1)获取表名:工作表对象.title #'Sheet1'
print(sheet1.title)

# 2)获取最大行数
print(sheet1.max_row)

# 3)获取最大列数
print(sheet1.max_column)

# 通过表获取单元格
# 1)获取指定一个单元格
# a.工作表['列号行号'] - 获取指定位置对应单元格(列号是字母)
cell1 = sheet1['B2']
print(cell1)

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

# 2)获取单元格内容
# a.单元格对象.value
print(cell1.value)
print(cell2.value)

# 练习:获取整个表中所有的单元格中的内容

for i in range(1, sheet1.max_row+1):
for j in range(1, sheet1.max_column+1):
cell3 = sheet1.cell(i, j)
print(cell3.value,end=' ')
print()


# 练习:获取第二行所有内容
for j in range(1, sheet1.max_column+1):
cell3 = sheet1.cell(2, j)
print(cell3.value,end=' ')

# 练习:获取第三列所有内容
for i in range(1, sheet1.max_row+1):
cell3 = sheet1.cell(i, 3)
print(cell3.value,end=' ')

2.excel 文件的写操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import openpyxl
import os

# 注意:excel 所有的写操作,如果有效必须在操作完成后对Excel文件对应的工作簿进行保存操作
# 1.新建工作簿
# wb = openpyxl.Workbook()

if os.path.exists('files/test.xlsx'):
print('打开')
wb = openpyxl.load_workbook('files/test.xlsx')
else:
wb = openpyxl.Workbook()
wb.save('files/test.xlsx')


# 2.保存工作簿
# 工作簿对象.save(文件路径)
# wb.save('files/test.xlsx')

# 3.针对表的写操作
# 1)新建表:工作簿对象.create_sheet(表名,位置)
# wb.create_sheet('老师表')
# wb.create_sheet('老师表',0)


# 2)删除表:工作簿最新.remove(表对象)
# try:
# wb.remove(wb['老师表'])
# except:
# pass

# 3)修改表的表名:表对象.title = 新的表名
if 'Sheet' in wb.sheetnames:
wb['Sheet'].title = '课程表'

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

# 4.修改单元格中的内容
sheet1 = wb.active
# print(sheet1)
# sheet1['A1'] = '姓名'
# sheet1['B1'] = '年龄'

# sheet1.cell(1,2).value = '姓名'
# wb.save('files/test.xlsx')

# 4.1删除单元格中的内容
# sheet1['B1'] = None
# wb.save('files/test.xlsx')

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

# list1 = ['Python', '余婷','5个月',10000]
# for index, item in enumerate(list1):
# sheet1.cell(3,index+1).value = item
#
# wb.save('files/test.xlsx')

3.csv文件读操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
import csv

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

f = open('files/douyin.csv', encoding='utf-8')

# reader = csv.reader(f)
reader = csv.DictReader(f)

# 2)通过reader读数据
print(next(reader))
print(next(reader))

f.close()


# 4.csv-写数据

'''
# 2.创建文件对应的writer对象
# 1)csv.writer(文件对象)
f = open('files/test1.csv', 'w', encoding='utf-8')
writer = csv.writer(f)

# 写数据:文件对象.writerow(列表)
writer.writerow(['name','age','score','gender'])
writer.writerows([
['小明',18,100,'男'],
['小花',18,100,'女']
])


# 2)csv.DictWriter(文件对象)
f = open('files/test2.csv','w',encoding='utf-8')
writer = csv.DictWriter(f,['name','age','score','gender'])

writer.writeheader()

writer . writerows([
{'name': '小花','age': 30,'score': 92,'gender':'女'},
{'name': '小红','age': 28,'score': 67,'gender':'女'},
{'name': '老王','age': 25,'score': 88,'gender':'男'}
])

f.close()

5.PDF文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import PyPDF2

# 5.1 - 读操作 - 获取pdf文件内容
# 1) 以读的方式打开pdf文件
# 创建PDF文件对象 - PyPDF2.PdfFileReader(文件路径)
reader = PyPDF2.PdfFileReader('files/python.pdf')

# 2)获取总的页数
# 文件对象.getNumPages()

total_page = reader.getNumPages()
print(total_page)

# 3)获取指定页面(PageObject的对象)
# 文件对象.getPage(页数)

page0 = reader.getPage(0)
page1 = reader.getPage(1)
page2 = reader.getPage(2)
page3 = page1.rotateClockwise(90)
# page4 = page1.scale(100,200)

# 2写操作

# 1)创建一个空的PDF文件对象
# PyPDF2.PdfFileWriter() - 创建一个空的PDF文件对象
write1 = PyPDF2.PdfFileWriter()

# 2)添加页面
# writer.addPage(页面对象) - 指定页
# writer.addBlankPage() - 添加空白页

write1.addPage(page0)
write1.addBlankPage()
write1.addPage(page1)
write1.addBlankPage()
write1.addPage(page2)
write1.addBlankPage()
write1.addPage(page3)

# 3)保存PDF文件
f = open('files/test.pdf','wb')
write1.write(f)
f.close()

PDF文件添加水印

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import PyPDF2

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

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

# 3.准备空的PDF,用来存放添加完水印的页

new_pdf = PyPDF2.PdfFileWriter()

for page_num in range(reader.getNumPages()):
# 获取原文件的页面内容
page = reader.getPage(page_num)
# 添加水印
page.mergePage(walter_page)
# 将添加完水印的页加到空白文档中
new_pdf.addPage(page)

# 5.保存新的PDF文件

f = open('files/存储引擎的讲解水印版.pdf','wb')
new_pdf.write(f)
f.close()

6.创建一个水印的PDF文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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('Font2','files/青呱石头体.ttf'))

# 2.生成文字
# 1)创建空的pdf文件

walter_pdf = canvas.Canvas('files/water.pdf')

# 2)设置字体

walter_pdf.setFont('Font1',40)

# 3)设置文字颜色

walter_pdf.setFillColorRGB(1,0,0,1)

# 4)旋转
walter_pdf.rotate(45)

# 5)渲染文字内容

walter_pdf.drawString(400,100,'hello world!')

# 6)保存

walter_pdf.save()

7.Excel文件转CSV文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import openpyxl
import csv

wb = openpyxl.load_workbook('files/小宝剑大药房.xlsx')
sheet1 = wb.active

big_list = []
for i in range(1, sheet1.max_row+1):
list1 = []
for j in range(1, sheet1.max_column+1):
cell3 = sheet1.cell(i, j)
list1.append(cell3.value)

big_list.append(list1)

f = open('files/test3.csv', 'w', encoding='utf-8')
writer = csv.writer(f)
writer.writerows(big_list)
f.close()

8.合并两个PDF文档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import PyPDF2

reader1 = PyPDF2.PdfFileReader('files/python.pdf')
reader2 = PyPDF2.PdfFileReader('files/demo1.pdf')
total_page1 = reader1.getNumPages()
total_page2 = reader2.getNumPages()
write1 = PyPDF2.PdfFileWriter()
for i in range(total_page1):
page = reader1.getPage(i)
write1.addPage(page)

for i in range(total_page2):
page = reader2.getPage(i)
write1.addPage(page)

f = open('files/合并python和demo1.pdf','wb')

write1.write(f)
f.close()