Python进阶学习(day11)---文件(三)

Office办公文件

目录

Office办公文件

1、Word文件

1.1、文件基本库函数:

1.1.1 文件的读取

1.1.2 文件的写入修改

1.2、使用场景:

1.2.2 写入内容:

1.2.3 生产内容:

2、Excel文件 

2.1、文件基本操作:

2.1.3 文件数据处理 pandas

3、PPT(PowerPoint)文件

3.1、文件基本操作和基本库的使用

3.1.1 基本功能

3.1.2 应用场景

4、PDF文件

4.1、基本操作

4.2、常见的库函数的使用:

4.2.1 创建与写入 PDF —— fpdf

4.2.2 读取与提取 PDF 内容 —— PyMuPDF (fitz), pdfplumber, PyPDF2

 4.2.3 PyMuPDF(fitz)高效处理 PDF 与图像

4.2.4 PyPDF2(轻量级 PDF 分页和合并工具) 


这里先说明一下doc文件和docx文件以及ppt和pptx文件等带x文件和不带x文件的区别。

doc文件和docx文件的区别

对比维度DOC格式DOCX格式
文件格式早期二进制格式,单一文件存储所有内容

基于XML的开放格式,实际为压缩包

(含多个XML文件和资源)

文件大小较大(尤其含图片时)较小(压缩技术优化存储效率)
兼容性旧版Word原生支持(2007之前)

新版Word(2007+)原生支持,

旧版需兼容包

安全性易携带宏病毒,风险较高默认禁用宏,安全性更好
功能支持仅支持基础排版和简单对象支持高级功能,例如:SmartArt 功能
跨平台适应性依赖Word软件解析,跨平台兼容性有限

基于开放标准,易与其他办公软件

兼容

扩展性扩展性差,修改易损坏文件结构模块化设计,便于内容提取和自动化处理

注意! 在对其office这些软件读取和操作时,我们不能按照普通格式文件(昨天的内容)带简单后缀进行打开,不能用 open(..., encoding=...) 读取!.xlsx 是 二进制格式 的 Excel 文件,内部是由多个 XML 和压缩文件组成的,不是纯文本。所以我们需要第三方库的支持。

1、Word文件

Word操作文档的库:

pip install python-docx

1.1、文件基本库函数:

本小节具体说明一些关于Python对Word文档的一些基本操作,具体详细内容参考python-docx文档。

1.1.1 文件的读取
#对.docx文件的读取
from docx import Document
WriteHead = "实验模版"
WriteContent = '1, 2, 3, 4, 5, 上山打老虎'
df = Document('E:\\CSDNTEXT\\TEXT.docx')
print(df.paragraphs[0].text) # 读取第一行内容
print(df.paragraphs[0].runs[0].text) # 只读第一行中(一个字符是拥有统一格式的一段文字)
df = Document('E:\\CSDNTEXT\\TEXT.docx')  # 打开已有文档或新建空文档
for i, para in enumerate(df.paragraphs):
    print(f"第{i+1}段内容:{para.text}")

1.1.2 文件的写入修改
# 写文件
df = Document('E:\\CSDNTEXT\\TEXT.docx')  # 打开已有文档或新建空文档
df.add_heading(WriteHead, level=1)  # 添加标题
df.add_paragraph(WriteContent[5])  # 添加无序列表(注意空格)
df.save('E:\\CSDNTEXT\\TEXT_结果.docx')  # 保存到新文件
#改文件内容
df = Document('E:\\CSDNTEXT\\TEXT.docx')  # 打开已有文档或新建空文档
for i, para in enumerate(df.paragraphs):
    print(f"第{i+1}段内容:{para.text}")
    if para.text == 'TEXT':
        para.text = '下山打老虎'  # 修改内容
        print(f"修改后的内容:{para.text}")

1.2、使用场景:

我们平时写请假条,电子版每次都要到网上模版,现在我们可以建立一个模版,只需要我们输入一些合适的文件必备内容,我们就可以一键生成Word文档,通过Python实现量化生产。

我们来做一个程序请假条:

1.2.1 创建文档并写入模版:

from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.oxml.ns import qn

name = input("请输入请假人姓名:")
nameTeach = input("请输入请假老师姓名:")
things = input("请输入请假事由:")
time = input("请输入请假时间:")
date = input("请输入请假日期:")

# 创建文档
doc = Document()

# 设置标题 黑体居中20榜体
title = doc.add_heading('请假条', level=1,)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
title_run = title.runs[0]
title_run.font.name = '黑体'    
title_run.font.size = Pt(20)
title_run.font.bold = True

# 添加正文内容
p1 = doc.add_paragraph()
p1.add_run('尊敬的').bold = True
p1.add_run(f'{nameTeach}').bold = True
p1.add_run('老师:').bold = True
p1.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT

p2 = doc.add_paragraph(f'我因{things},特向您请假。请假时间:{time}')
p2.paragraph_format.left_indent = Pt(20)  # 设置左缩进为20pt
p2.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT

p22 = doc.add_paragraph('恳请老师的批准!')
p22.paragraph_format.left_indent = Pt(20)  # 设置左缩进为20pt
p22.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT

p3 = doc.add_paragraph('此致')
p3.paragraph_format.left_indent = Pt(20)  # 设置左缩进为20pt
p3.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT

p33 = doc.add_paragraph('敬礼!')
p33.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT

# 签名部分右对齐
p4 = doc.add_paragraph(f'请假人:{name}')
p4.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT

p5 = doc.add_paragraph(f'日期:{date}')
p5.alignment = WD_PARAGRAPH_ALIGNMENT.RIGHT

# 设置整体字体为仿宋,小四(12pt)
style = doc.styles['Normal']
font = style.font
font.name = '仿宋'
font.size = Pt(12)
# 兼容中文字体设置
style.element.rPr.rFonts.set(qn('w:eastAsia'), '仿宋')

# 保存文档
doc.save(f'E:\\CSDNTEXT\\{name}CSDN请假条.docx')
1.2.2 写入内容:

1.2.3 生产内容:


 

2、Excel文件 

Excel文件和.csv文件有很多相似之处和不同,具体参照文章:对csv文件,又get了新的认知。同时,在外面具体项和研究中,Excel文件我们使用非常频繁,数据库、爬虫、数据处理等都会用到。由于Python对数据处理有强大的功能我们只是简单讲解,具体后面慢慢补充。

Excel文件所需的库:

pip install xlwt xlrd xlutils

数据处理的库等;

import pandas as pd

2.1、文件基本操作:

2.1.1 xlrd文件读取

work = xlrd.open_workbook("E:\\CSDNTEXT\\TEXTStu.xls")

# print(work.sheet_names()) # 打印所有sheet名称
# print(work.nsheets()) # 打印所有sheet对象
# print(work.sheet_by_index(0).name) # 打印第一个sheet名称

# 打印第一个sheet第一列所有数据
sheet = work.sheet_by_index(0) # 选择第一个sheet
for i in range(sheet.nrows): # sheet.nrows是行数
    print(sheet.row_values(i)[0]) # sheet.row_values(i)是第i行所有数据,sheet.row_values(i)[0]是第i行第一列数据

2.1.2 openyxl基本写入和读取

我们可以通过openyxl进行Python对Excel文件的操作,具体库的使用,参考其官网教程

# Excel 基本操作
import openpyxl

#创建一个新的Excel工作簿
workbook = openpyxl.Workbook()

#选择活动工作表
sheet = workbook.active

#设置工作表标题
sheet.title = '一班人员名单'

#再创建一个sheet
sh2=workbook.create_sheet('二班人员名单',0) #后面参数:0是第一个位置,1是第二个位置

#操作一班人员名单表单
shOne = workbook['一班人员名单']
# shTwo = workbook['二班人员名单']

#给表单写入数据
shOne['A1'] = '姓名'
shOne['B1'] = '学号'

#特定的单元格写入数据
shOne.cell(2,1).value = '张三'
shOne.cell(2,2).value = '20230101'

#读取数据
print(shOne['A1'].value) #读取A1单元格的值
print(shOne.cell(1, 1).value) #读取A1单元格的值

# 循环写入
name = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十'] #姓名列表
num = ['20230101', '20230102', '20230103', '20230104', '20230105', '20230106', '20230107', '20230108'] #学号列表

for i,na in enumerate(name):
    shOne.cell(i+2, 1).value = name[i] #写入姓名 或者 na->name[i]
    shOne.cell(i+2, 2).value = num[i] #写入学号

#保存工作簿
workbook.save('E:\\CSDNTEXT\\TEXTStu.xlsx')
2.1.3 文件数据处理 pandas

我们对数据处理,Pandas 是 Python 语言的一个扩展程序库,用于数据分析。Pandas 名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。清洗需要使用很多函数,数据的表格操作,这里面就有很强大的库(pandas),具体详细操作pandas官网

# 导入pandas库
import pandas as pd

# 读取Excel文件
df = pd.read_excel('E:\\CSDNTEXT\\TEXTStu.xlsx', sheet_name='一班人员名单')

# 数据清洗
df.dropna()  # 删除包含缺失值的行
df.fillna(0)  # 将缺失值填充为 0

df.drop_duplicates()  # 删除重复行

df.rename(columns={'旧列名': '新列名'}, inplace=True)  # 重命名列

# 数据操作
print(df['列名'].mean())  # 平均值
print(df['列名'].sum())  # 总和
print(df['列名'].max())  # 最大值
print(df['列名'].min())  # 最小值
print(df['列名'].std())  # 标准差
print(df['列名'].value_counts())  # 统计每个值的出现次数

# 数据保存
df.to_excel('output.xlsx', index=False)  # 保存为 Excel 文件
df.to_csv('output.csv', index=False)  # 保存为 CSV 文件
df.to_json('output.json', orient='records')  # 保存为 JSON 文件


 

3、PPT(PowerPoint)文件

PPT文件操作所需的库:

pip install python-pptx

3.1、文件基本操作和基本库的使用

3.1.1 基本功能

在该小节是说明python对文件的创建,读取,修改等操作,更具体参考python-pptx官网

from pptx import Presentation

# 创建PPTX演示文稿对象
prs = Presentation()

# 添加新的幻灯片
slide_layout = prs.slide_layouts[0]  # 选择第一个幻灯片布局
slide = prs.slides.add_slide(slide_layout)

# 添加标题和内容(文本框)
title = slide.shapes.title
content = slide.placeholders[1]  # 占位符1通常是内容框
title.text = "Hello, PPTX!"  # 设置标题文本
content.text = "这是一个PPTX演示文稿CSDN."  # 设置内容文本

# 新建一个ppt页面添加图片
slide_layout = prs.slide_layouts[5]  # 选择空白幻灯片布局
slide = prs.slides.add_slide(slide_layout)  # 添加新的幻灯片
img = slide.shapes.add_picture("E:\\CSDNTEXT\\TEXT.png", left=0, top=0, width=prs.slide_width, height=prs.slide_height)  

# 添加表格
from pptx.util import Inches
from pptx.dml.color import RGBColor
slide_layout = prs.slide_layouts[5]  # 选择空白幻灯片布局
slide = prs.slides.add_slide(slide_layout)  # 添加新的幻灯片
table = slide.shapes.add_table(rows=3, cols=3, # 表格布局和大小
                              left=Inches(1), 
                              top=Inches(4), 
                              width=Inches(5), 
                              height=Inches(2)).table
table.cell(0, 0).text = "姓名"  # 设置表格第一行第一列的文本
table.cell(0, 1).text = "学号"  # 设置表格第一行第二列的文本
# 文本内容居中
table.cell(0, 0).text_frame.paragraphs[0].alignment = 1  # 设置文本居中对齐
table.cell(0, 0).text_frame.paragraphs[0].font.bold = True  # 设置文本加粗

# 保存PPTX文件
prs.save("E:\\CSDNTEXT\\TEXT1.pptx")  # 保存文件到指定路径
3.1.2 应用场景

创建一个我们商业pptx,基本的办公ppt,可以临时制作一个模版,到时候使用时,我们只需要输入相关内容,选取合适的模版,我们就可以高效的使用文档ppt模版。

我们来创建一个基本的两页一个主题页和目录页的模版。

(1)代码内容:

# 创建一个工作汇报pptx
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE

pptname = input("请输入您的ppt保存名称:")
pptItem = input("请输入您的ppt主题:")
pptMContext = input("请输入您的ppt的主题内容")

# 创建PPTX演示文稿对象
prs = Presentation()

# 添加标题幻灯片
slide_layout = prs.slide_layouts[0]  # 标题幻灯片布局
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = pptItem
subtitle.text = pptMContext

# 添加内容幻灯片
slide_layout = prs.slide_layouts[1]  # 内容幻灯片布局
slide = prs.slides.add_slide(slide_layout)
title = slide.shapes.title
content = slide.placeholders[1]
title.text = "目录内容"
# 输入你的目录内容:
n = int(input("你有多少节目录:"))  
tt = {}  

for i in range(1, n + 1):
    tt[i] = input(f"输入你的第{i}个目录:\n")

# 将目录内容拼接成一个字符串并设置到 content.text
content.text = "\n".join([f"{i}. {tt[i]}" for i in range(1, n + 1)])
# 保存PPTX文件
prs.save(f"E:\\CSDNTEXT\\{pptname}.pptx")

(2)运行结果:

(3)生成内容:


4、PDF文件

我们也可以对PDF文件进行操作,PDF文件操作所需的库:

pip install PyPDF2 #PDF的一些基本整体操作
pip install fpdf #创建PDF
pip install pdfplumber #对PDF提取某些元素

对于我们要用的库详见PyPDF2文档,具体的相关操作。 

4.1、基本操作

from PyPDF2 import PdfReader
from PyPDF2 import PdfMerger
from fpdf import FPDF
import pdfplumber

reader = PdfReader('E:\\CSDNTEXT\\TEXT.pdf')
for page in reader.pages:
    print(page.extract_text())

pdf = FPDF() # 创建一个PDF对象
pdf.add_page()
pdf.set_font("Arial", size=12)
pdf.cell(200, 10, txt="Hello World!", ln=True, align='C')
pdf.output("E:\\CSDNTEXT\\TEXTinput.pdf")

merger = PdfMerger()# 合并pdf文件
merger.append("E:\\CSDNTEXT\\TEXT.pdf")
merger.append("E:\\CSDNTEXT\\TEXTinput.pdf")
merger.write("E:\\CSDNTEXT\\merged.pdf")
merger.close()

# 使用pdfplumber读取pdf文件
with pdfplumber.open("E:\\CSDNTEXT\\TEXT.pdf") as pdf:
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            print(table)

import fitz  # PDF文件处理图片

doc = fitz.open("E:\\CSDNTEXT\\TEXT.pdf")
for page_number in range(len(doc)): # 遍历每一页
    for img_index, img in enumerate(doc[page_number].get_images(full=True)): # 遍历每一页的图片
        xref = img[0] # 获取图片的xref
        base_image = doc.extract_image(xref) # 提取图片
        image_bytes = base_image["image"] # 获取图片的字节流
        with open(f"image_{page_number+1}_{img_index+1}.png", "wb") as f: # 保存图片
            f.write(image_bytes)    

4.2、常见的库函数的使用:

4.2.1 创建与写入 PDF —— fpdf
from fpdf import FPDF

#add_page():添加新页面

#set_font(family, size, style):设置字体

#cell(w, h, txt, ln, align):创建单元格并写入文本

#output("filename.pdf"):保存 PDF 文件

4.2.2 读取与提取 PDF 内容 —— PyMuPDF (fitz), pdfplumber, PyPDF2
import pdfplumber

#pdf.pages:获取所有页面

#page.extract_text():提取纯文本

#page.extract_tables():提取表格数据

4.2.3 PyMuPDFfitz)高效处理 PDF 与图像
import fitz  # pip install pymupdf

#get_text():提取文字

#get_images():获取图片信息

#extract_image(xref):提取图片

#insert_image():插入图片

4.2.4 PyPDF2(轻量级 PDF 分页和合并工具) 
from PyPDF2 import PdfReader, PdfWriter

#PdfReader("file.pdf"):读取 PDF

#reader.pages:获取页面列表

#add_page():添加页面到新 PDF

#write():写入文件

五、总结

         在Python对文件操作时,要先了解包内的函数和具体使用方法,可以点击**包的超链接跳入其文档,有更高效的方法进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值