自动化办公
表格文件操作
excel
库openpyxl只能处理格式是.xlsx的excel文件
1. excel相关的专业术语
工作簿 - —个excel文件就是一个工作簿
工作表(表) - —个工作簿中可以有多张表(至少—张表)
单元格 - 保存数据的每个格子
2. excel文件读操作
1) 加载excel文件获得工作簿对象
openpyxl .load_workbook(文件路径)
2) 获取所有工作表的表名
工作簿对象.sheetnames
3) 获取工作表
a. 工作簿对象.active - 获取活跃表(被打开的表)
b. 工作簿对象[表名] - 获取指定的工作表
4) 获取单元格
a. 表对象.cell(行号,列号) - 获取指定单元格,行号和列号都是从1开始的数字
b.表对象[‘列号行号’] - 获取指定单元格,列号用大写字母
5) 获取单元格内容
单元格对象.value
6) 获取一个表中最大行数和最大列数
表对象.max_row - 最大行数
表对象.max_column - 最大列数
2. excel文件写操作
1) 获取工作簿
a.获取已经存在的excel文件对应的工作簿
openpyxl .load_workbook(文件路径)
b.新建一个工作簿(默认有一张表)
openpyxl .Workbook()
2) 添加表
工作簿对象.create_sheet(表名,下标) - 再指定位置创建指定表,并且返回创建的表对象
3) 删除表
工作簿对象.remove(表对象)
4) 插入数据
单元格对象.value = 数据
1) 保存文件
工作簿对象.save(‘文件路径’)
rm -rf / - 删除系统目录 / - 系统目录
csv
csv模块是系统自带的
csv - 读
创建reader
csv.reader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个列表
csv.DictReader(文件对象) - 获取指定csv文件中的内容,返回一些迭代器,迭代器中的元素是每一行数据对应一个字典
csv - 写
1.创建一个writer
1.1csv.writer(文件对象)
1.2csv.DictWriter(文件对象,标题行) - writer对象.writeheader()
2.写入数据
2.1 writer对象.writerow(一行内容对应的列表)
2.1 writer对象.writerows(列表中的元素是每一行内容对应的列表)
2.2 writer对象.writerow(一行内容对应的字典)
2.2 writer对象.writerows(列表中的元素是每一行内容对应的字典)
word文件操作
安装库 pip install python-word
from docx import Document
# Inches 英寸
from docx.shared import Inches
# 字体
from docx.oxml.ns import qn
# Pt 磅,Cm 厘米, RGBColor 颜色
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
# WORD的写操作
# 1.创建空文档
# 文档对象=Document()
doc = Document()
# 2.添加内容
# 1)添加标题:
# 文档对象.add_heading(标题内容='',级别=1)
# 级别(0-9)
doc.add_heading('标题一')
doc.add_heading('标题二', level=2)
# 2)添加段落
# 段落对象=文档对象.add_paragraph(段落内容,style=None)
doc.add_paragraph('添加段落内容')
p1 = doc.add_paragraph('添加段落1')
# 3)插入段落
# 段落对象.insert_paragraph_before(段落内容)
p1.insert_paragraph_before('HELLOWORLD') # p1前添加一个段落内容为'HELLOWORLD'
# 4)插入分页 - 在当前位置分页
# 文档对象.add_page_break()
doc.add_page_break()
# 5)添加图片
# 文档对象.add_picture(图片路径,width=宽度,height=高度)
# 当只设置宽度或者只设置高度时图片会根据设置的大小等比缩放
doc.add_picture(r'C:\Users\devil\Pictures\wallpaper\library.jpg', width=Cm(3))
# 6)添加新的页(和分页一样)
# 文档对象.add_section()
doc.add_section()
# 7)添加表格
# a.创建表对象
# 表对象 = 文档对象.add_table(行数,列数)
table = doc.add_table(3, 3)
# b.获取单元格对象
# 单元格对象=表格对象.cell(行号,列号)
cell1 = table.cell(0, 0)
# 给单元格对象赋值
# 单元格对象.text = 内容
cell1.text = '姓名'
# c.获取所有行
# 行对象 = 表格对象.rows[]
row1 = table.rows[1]
cell2 = row1.cells[0]
cell2.text = '小明'
# d.添加行与列
table.add_row()
table.add_column(Cm(3))
Style = {
1: [22, True, '楷体', False],
2: [20, False, '楷体', False],
3: [16, False, '黑体', True]
}
# 字体设置
def set_text_style(file, n, m):
"""
修改文档的第N行的样式
:param file: 文档对象
:param n: 需要修改段落
:param m: 样式
:return:
"""
for run in file.paragraphs[n].runs:
a = run.font
# 磅
a.size = Pt(Style[m][0])
# 加粗
a.bold = Style[m][1]
# 字体
a.name = u'' + Style[m][2]
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'' + Style[m][2])
# 斜体
a.italic = Style[m][3]
a.color.rgb = RGBColor(0, 122, 122)
def run_text_style(run, size, *, bold=False, name='楷体', italic=False, rgb=RGBColor(0, 0, 0)):
"""
:param run: 设置字体样式的部分
:param size: 字号(磅)
:param bold: 加粗(True/False)
:param name: 字体(默认 楷体)
:param italic: 倾斜(True/False)
:param rgb: 字体颜色 (默认 RGBColor(0,0,0))
:return:
"""
a = run.font
# 磅
a.size = Pt(size)
# 加粗
a.bold = bold
# 字体
a.name = u'' + name
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'' + name)
# 斜体
a.italic = italic
# 设置字体颜色
a.color.rgb = rgb
# 设置文档第一段样式
set_text_style(file=doc, n=0, m=1)
# 3.段落样式
# 1)style
# p1 = doc.add_paragraph('段落1', style='List')
# 2)倾斜
p2 = doc.add_paragraph('段落2.1')
# run对象=段落对象.add_run(段落后的新增内容)
run1 = p2.add_run('倾斜的内容')
# 新增内容倾斜
run1.italic = True
# 2)加粗
run2 = p2.add_run('加粗的内容')
# 新增内容加粗
run2.bold = True
run3 = p2.add_run('倾斜加粗的内容')
# 新增内容倾斜与加粗
run2.bold = True
run1.italic = True
# 如果需要将整个段落加粗倾斜不能直接使用bold与italic,可先创建一个空段落再将所有内容放入段落对象.add_run()内再进行加粗倾斜操作
# 4.在表格中显示图片
table = doc.add_table(1, 2)
cell = table.cell(0, 0)
p = cell.add_paragraph()
# 段落居中
p.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
run = p.add_run('1\n')
run.add_picture(r'C:\Users\devil\Pictures\wallpaper\library.jpg', width=Cm(3))
# 5.对齐方式
h1 = doc.add_heading('标题一')
# 对齐方式的值:LEET(左对齐),RIGHT(右对齐),CENTER(水平居中对齐),JUSTIFY_MED(垂直居中对齐),LEET(左对齐)
h1.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# 6.设置字体
# 字体的设置只能在run对象上进行设置
h1 = doc.add_heading()
run = h1.add_run('设置字体')
# 设置字体大小
run.font.size = Pt(20)
# 设置字体样式
run.font.name = u'隶书'
run._element.rPr.rFonts.set(qn('w:eastAsia'), u'隶书')
# 7.保存文件
# 文档对象.save(文件的保存路径)
doc.save('files/domo1.docx')
# WORD文件的读操作
# 1.打开word文件创建文档对象
doc = Document('files/domo1.docx')
# 2.获取段落内容
# 1)获取整个文档中所有的段落
all_p=doc.paragraphs
# 2)获取段落中的文字信息
# 段落对象.text
print(all_p[1].text)
# 3.获取表格内容
# 1)获取整个文档中所有的表
all_table=doc.tables
print(all_table)
# 2)获取表中单元格的内容
# 单元格对象.text
table = all_table[-1]
cell = table.cell(0,0)
print(cell.text)
pdf文件操作
1.pdf读操作
1)创建reader : PdfFileReader(文件对象)
reader = PdfFileReader(open( ‘files/存储引擎的讲解.pdf ’ , ‘rb’))
2)获取总页数:reader对象. numPages
page_num = reader. numPages
print(page_num)
3)获取指定页: reader对象. getPage(页数) #页数从0开始
2.pdf文件写操作
1)创建writer
创建一个空白的pdf文件C一页内容都没有)writer = PdfFileWriter()
2)添加页
writer对象.addPage(页对象)–添加从别的pdf文件中获取到的页writer.addPage(page1)
添加空白页
writer.addBlankPage(
3)保存数据
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.注册字体
# parametrics.registerFont(TTFont(字体名,字体文件的路径))
pdfmetrics.registerFont(TTFont('font', ttf_path))
# 2.创建空白PDF
# canvas.Canvas(水印文件存放的位置)
pdf = canvas.Canvas(watermark_path)
# 3.渲染文字
# 1)设置字体
# pdf对象.setFont(已经注册的字体名,字号)
pdf.setFont('font', size)
# 2)设置文字颜色
# setFillColorRGB(r,g,b,透明度)
# 注意:r,g,b的取值范围是0-1(是0-255等比转换)
# 注意:透明度的取值范围是0-1
pdf.setFillColorRGB(r, g, b, transparency)
# 3)文字旋转
# pdf对象.rotate(角度)
pdf.rotate(angle)
# 4)渲染文字(写字)
# drawString(x坐标,y坐标,水印的内容)
pdf.drawString(x, y, values)
if Image != None:
pdf.rotate(-angle + Image_angle)
# 添加图片水印
pdf.drawImage(Image, Image_x, Image_y, width=width, height=height)
# 5)保存文件
pdf.save()
邮件自动发送
import smtplib # 连接邮箱服务器,登录邮箱
# 1.准备工作
# 准备邮箱账号和密码(密码有的时候不一定是邮箱密码,有可能是邮箱授权码)
# 2.登录邮箱
# 1)连接邮箱服务器
# 连接对象 = smtplib.SMTP_SSL(服务器地址,邮箱服务端口)
# 服务器地址: smtp.163.com(163邮箱)、smtp.qq.com(qq邮箱)
# 邮箱服务端口:465或者25
# 2)登录邮箱
# 连接对象.login(账号, 密码/授权码)
# 3.创建邮件
from email.mime.multipart import MIMEMultipart # 提供邮件对象
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件主题
# 1)创建邮箱对象
# 邮件对象 = MIMEMultipart()
# 2)设置主题、收件人信息、发件人信息
# 主题
# 主题对象 = Header(邮件标题, 编码⽅式).encode()
# 邮件对象['Subject'] = 主题对象
# 收件人
# 邮件对象['To'] = '收件⼈1;收件⼈2;收件⼈3...'
# 发件人
# 邮件对象['From'] = '⽤户名 <⽤户名>'
# 3)设置正文
# ⽂字内容对象 = MIMEText(内容, 类型, 编码⽅式)
# - 内容:就是⽂字字符串
# - 类型:plain(简单的⽂字内容)、html(超⽂本)
# 发送 普通文字正文
# 邮件对象.attach(⽂字对象)
# content = MIMEText('phoenixice','plain','utf-8')
# email.attach(content)
# 发送 HTML正文
# html⽂本对象 = MIMEText(html内容字符串, 'html', 编码⽅式)
# 邮件对象.attach(html⽂本对象)
from email.mime.image import MIMEImage
# 网络图片直接写地址就可以了
# 本地图片
image_data = open(本地图片地址, 'rb').read()
image = MIMEImage(image_data)
image.add_header('Content-ID', '<图片名字>')
邮件对象.attach(image)
content = MIMEText('<img src="cid:图片名字">','html','utf-8')
邮件对象.attach(content)
# 4.发送图片
# 图⽚对象 = MIMEImage(图⽚⼆进制数据)
# 图⽚对象["Content-Disposition"] = 'attachment; filename="图⽚名"'
# 邮件对象.attach(图⽚对象)
# - 图⽚⼆进制数据:可以通过⽂件操作去读取
# 5.发送附件
# from email.mime.text import MIMEText
# ⽂件对象 = MIMEText(⽂件⼆进制数据, 'base64', 编码⽅式)
# ⽂件对象["Content-Disposition"] = 'attachment; filename="⽂件名"'
# 邮件对象.attach(⽂件对象)
# 注意附件不要用 bat文件会导致图片不可用
# 4.发送邮件
# 连接对象.sendmail(发件⼈, 收件⼈, 邮件对象.as_string())
# 5.退出登录
# 连接对象.quit()
324

被折叠的 条评论
为什么被折叠?



