Python文件操作(Excel、PDF、XML、Word)

大家好,在现代数据驱动的世界中,对于数据的处理和管理是至关重要的。Python作为一种强大而灵活的编程语言,提供了丰富的工具和库来处理各种文件格式。本文将探讨Python中的文件操作,重点介绍如何使用Python处理Excel、PDF、XML和Word等常见文件格式,希望能给大家的工作带来一些帮助。

一、常规文件

Python提供了丰富的文件操作功能,可以用于创建、读取、写入和管理文件。下面我将详细介绍Python中常见的文件操作:

1、打开文件(Open File):

要操作文件,首先需要使用内置的open()函数打开文件。open()函数接受文件路径和打开模式作为参数,并返回一个文件对象,用于后续的读取或写入操作。

python 复制代码
# 打开文件
file = open('example.txt', 'r')  # 以只读模式打开文件

2、读取文件内容(Read File):

可以使用文件对象的read()方法来读取文件内容。您可以一次读取整个文件,也可以按行读取文件内容。

python 复制代码
# 读取整个文件内容
content = file.read()

# 按行读取文件内容
for line in file:
    print(line)

3、写入文件内容(Write File):

使用文件对象的write()方法将数据写入文件。在打开文件时,要确保使用写入模式('w'或'a')。

python 复制代码
# 写入数据到文件
file = open('example.txt', 'w')  # 以写入模式打开文件
file.write('Hello, world!')

4、关闭文件(Close File):

在完成对文件的操作后,需要使用文件对象的close()方法关闭文件。关闭文件可以释放资源并确保数据被正确写入磁盘。

python 复制代码
# 关闭文件
file.close()

5、自动关闭文件(With Statement):

使用with语句可以在文件操作结束后自动关闭文件,不需要手动调用close()方法。

python 复制代码
with open('example.txt', 'r') as file:
    content = file.read()
    print(content)

6、文件操作模式(File Modes):

open()函数支持多种文件操作模式,包括:

  • 'r':只读模式(默认),文件必须存在。
  • 'w':写入模式,如果文件存在则清空文件,如果文件不存在则创建新文件。
  • 'a':追加模式,如果文件存在则在文件末尾追加数据,如果文件不存在则创建新文件。

7、其他操作:

除了上述基本操作外,Python还提供了其他文件操作功能,如文件重命名、删除文件等。您可以使用os模块和shutil模块来执行这些操作。

python 复制代码
import os

# 文件重命名
os.rename('old.txt', 'new.txt')

# 删除文件
os.remove('example.txt')

通过上述方法,您可以在Python中进行各种文件操作,包括读取、写入、关闭文件以及其他文件管理操作。记住在文件操作完成后关闭文件是一个良好的习惯,以避免资源泄露和数据丢失。

二、使用openpyxl操作Excel文件

openpyxl 是一个用于操作 Excel 文件的Python库,它可以读取、写入和修改 Excel 文件。

1、安装 openpyxl:

python 复制代码
pip install openpyxl

2、打开 Excel 文件:

要操作 Excel 文件,首先需要打开它。使用 load_workbook() 函数打开一个现有的 Excel 文件:

python 复制代码
from openpyxl import load_workbook

workbook = load_workbook('example.xlsx')

3、获取工作表:

打开 Excel 文件后,可以使用 active 属性获取默认的工作表,或者使用 get_sheet_by_name() 方法获取指定名称的工作表:

python 复制代码
# 获取默认的工作表
sheet = workbook.active

# 获取指定名称的工作表
sheet = workbook.get_sheet_by_name('Sheet1')

4、读取单元格数据:

可以使用工作表对象的 cell() 方法或直接通过索引来访问单元格,并使用 value 属性获取单元格中的数据:

python 复制代码
# 通过索引读取单元格数据
data = sheet['A1'].value

# 使用 cell() 方法读取单元格数据
data = sheet.cell(row=1, column=1).value

5、写入单元格数据:

可以使用 cell() 方法或直接通过索引来写入数据到单元格:

python 复制代码
# 通过索引写入数据到单元格
sheet['A1'] = 'Hello, world!'

# 使用 cell() 方法写入数据到单元格
sheet.cell(row=1, column=1).value = 'Hello, world!'

6、合并单元格:

可以使用 merge_cells 方法将多个单元格合并成一个单元格。

python 复制代码
from openpyxl import Workbook

# 创建一个新的工作簿和工作表
workbook = Workbook()
sheet = workbook.active

# 合并单元格
sheet.merge_cells('A1:B2')

7、设置单元格样式:

可以使用 FontPatternFill 等对象来设置单元格的字体、颜色、填充等样式。

python 复制代码
from openpyxl.styles import Font, PatternFill

# 设置字体样式
font = Font(name='Arial', size=12, bold=True)

# 设置填充样式
fill = PatternFill(fill_type='solid', start_color='FF0000')

# 将样式应用到单元格
sheet['A1'].font = font
sheet['A1'].fill = fill

8、创建图表:

可以使用 openpyxl.chart 模块来创建各种类型的图表,并将其添加到工作表中。

python 复制代码
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference

# 创建一个新的工作簿和工作表
workbook = Workbook()
sheet = workbook.active

# 创建数据
data = [
    ['Category', 'Value'],
    ['A', 10],
    ['B', 20],
    ['C', 30]
]

# 将数据写入工作表
for row in data:
    sheet.append(row)

# 创建柱状图
chart = BarChart()
chart.title = 'Sample Chart'
chart.x_axis.title = 'Category'
chart.y_axis.title = 'Value'

# 设置图表数据范围
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=4)
categories = Reference(sheet, min_col=1, min_row=2, max_row=4)

# 添加数据和分类到图表
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

# 将图表添加到工作表
sheet.add_chart(chart, 'E1')

9、拆分单元格:

openpyxl 中,拆分单元格的功能并不直接提供,但可以通过合并单元格的相反操作来实现拆分单元格的效果。

(1)先判断单元格是否是合并单元格:

可以通过检查单元格的 merged_cells 属性来确定一个单元格是否是合并单元格。

python 复制代码
from openpyxl import load_workbook

# 打开 Excel 文件
workbook = load_workbook('example.xlsx')
sheet = workbook.active

# 检查单元格是否是合并单元格
is_merged = sheet.merged_cells.issuperset(sheet['A1':'B2'])

(2)如果是合并单元格,进行拆分:

如果确定某个单元格是合并单元格,可以使用 unmerge_cells() 方法来拆分单元格。

python 复制代码
from openpyxl import load_workbook

# 打开 Excel 文件
workbook = load_workbook('example.xlsx')
sheet = workbook.active

# 拆分单元格
sheet.unmerge_cells('A1:B2')

10、保存 Excel 文件:

在完成对 Excel 文件的操作后,要记得保存文件,以确保修改生效:

python 复制代码
workbook.save('example.xlsx')

11、示例:

下面是一个完整的示例

python 复制代码
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
from openpyxl.styles import Font, PatternFill

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

# 获取默认的工作表
sheet = workbook.active

# 写入数据到工作表
data = [
    ['Category', 'Value'],
    ['A', 10],
    ['B', 20],
    ['C', 30]
]

for row in data:
    sheet.append(row)

# 设置标题行字体样式
font = Font(bold=True)
for cell in sheet['1:1']:
    cell.font = font

# 设置填充样式
fill = PatternFill(fill_type='solid', start_color='FF0000')
for row in sheet.iter_rows(min_row=2, max_row=4, min_col=2, max_col=2):
    for cell in row:
        cell.fill = fill

# 创建柱状图
chart = BarChart()
chart.title = 'Sample Chart'
chart.x_axis.title = 'Category'
chart.y_axis.title = 'Value'

# 设置图表数据范围
data = Reference(sheet, min_col=2, min_row=1, max_col=2, max_row=4)
categories = Reference(sheet, min_col=1, min_row=2, max_row=4)

# 添加数据和分类到图表
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)

# 将图表添加到工作表
sheet.add_chart(chart, 'E1')

# 保存工作簿到文件
workbook.save('example.xlsx')

首先,创建一个新的工作簿,并获取默认的工作表。然后,写入数据到工作表,并设置标题行的字体样式和数据单元格的填充样式。接下来,创建一个柱状图,并设置图表的标题和坐标轴标题。最后,将图表添加到工作表中,并保存工作簿到文件。

三、使用PyPDF2操作PDF文件

PyPDF2 是一个用于处理PDF文件的Python库,它可以实现对PDF文件的读取、写入和修改。

1、安装 PyPDF2:

python 复制代码
pip install PyPDF2

2、读取 PDF 文件:

使用 PdfFileReader 类可以打开并读取一个 PDF 文件。

python 复制代码
import PyPDF2

# 打开 PDF 文件
with open('example.pdf', 'rb') as file:
    reader = PyPDF2.PdfFileReader(file)

    # 获取 PDF 文档的总页数
    num_pages = reader.numPages

    # 读取每一页的内容
    for page_number in range(num_pages):
        page = reader.getPage(page_number)
        text = page.extractText()
        print(text)

3、写入 PDF 文件:

使用 PdfFileWriter 类可以创建一个新的 PDF 文件,并写入内容。

python 复制代码
import PyPDF2

# 创建一个 PDF 写入对象
writer = PyPDF2.PdfFileWriter()

# 创建一个页面并添加内容
page = PyPDF2.PageObject()
page.mergePage(reader.getPage(0))  # 从现有 PDF 中获取页面内容
writer.addPage(page)

# 将写入的内容保存到新的 PDF 文件中
with open('new_pdf.pdf', 'wb') as file:
    writer.write(file)

4、注意事项:

  • PyPDF2 对于某些特殊格式的 PDF 文件可能无法正确解析或处理。如果遇到解析错误,可以尝试其他库,如 pdfplumber
  • 在写入 PDF 文件时,建议先确保所写入的内容格式正确,以免造成文件损坏。

5、示例:

python 复制代码
import PyPDF2

# 打开 PDF 文件
with open('example.pdf', 'rb') as file:
    # 创建 PdfFileReader 对象
    reader = PyPDF2.PdfFileReader(file)

    # 获取 PDF 文档的总页数
    num_pages = reader.numPages

    # 读取每一页的内容
    for page_number in range(num_pages):
        # 获取页面对象
        page = reader.getPage(page_number)

        # 提取文本内容
        text = page.extractText()

        # 打印文本内容
        print(f'Page {page_number + 1}:')
        print(text)
        print()

上述示例中,打开了一个名为 example.pdf 的PDF文件,并逐页读取其内容。对于每一页,它使用 getPage() 方法获取页面对象,然后使用 extractText() 方法提取页面的文本内容。最后,它打印出每一页的文本内容。

四、操作XML文件

可以使用内置的xml模块来操作XML文件。这个模块提供了一种简单而有效的方式来解析和生成XML文档。

1、解析XML文件:

可以使用xml.etree.ElementTree模块的ElementTree类来解析XML文件。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 遍历XML文档
for child in root:
    print(child.tag, child.attrib)
    for subchild in child:
        print(subchild.tag, subchild.text)

2、创建XML文件:

使用ElementTree类来创建XML文档。

python 复制代码
import xml.etree.ElementTree as ET

# 创建根元素
root = ET.Element('root')

# 创建子元素
child1 = ET.SubElement(root, 'child1')
child2 = ET.SubElement(root, 'child2')

# 设置子元素的文本内容
child1.text = 'This is child 1'
child2.text = 'This is child 2'

# 创建XML文档
tree = ET.ElementTree(root)

# 将XML文档保存到文件
tree.write('output.xml')

3、修改XML文件:

通过修改Element对象的属性和文本来修改XML文档。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 修改XML文档
for child in root:
    if child.tag == 'child1':
        child.text = 'Modified child 1'

# 将修改后的XML文档保存到文件
tree.write('modified.xml')

4、查找元素:

可以使用 find() 方法和 findall() 方法来查找XML文档中的元素。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 查找元素
element = root.find('child1')
elements = root.findall('child2')

5、添加属性:

使用 set() 方法来为元素添加属性。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 添加属性
element = root.find('child1')
element.set('attr', 'value')

6、删除元素:

使用 remove() 方法来删除元素。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 删除元素
element = root.find('child1')
root.remove(element)

7、迭代器:

使用 iter() 方法和 next() 函数来创建一个迭代器,用于按顺序访问XML文档中的所有元素。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 创建迭代器
iter = root.iter()
element = next(iter)

8、遍历父元素和子元素:

使用 iter() 方法和 iterfind() 方法来遍历父元素和子元素。

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('example.xml')
root = tree.getroot()

# 遍历父元素
for parent in root.iter():
    for child in parent.iterfind('child'):
        print(child.tag)

9、示例:

python 复制代码
import xml.etree.ElementTree as ET

# 解析XML文件
tree = ET.parse('books.xml')
root = tree.getroot()

# 遍历XML文档并打印书籍信息
for book in root.findall('book'):
    # 获取书籍的属性值
    book_id = book.attrib['id']

    # 获取书籍的子元素值
    title = book.find('title').text
    author = book.find('author').text
    price = book.find('price').text

    # 打印书籍信息
    print(f"Book ID: {book_id}")
    print(f"Title: {title}")
    print(f"Author: {author}")
    print(f"Price: {price}")
    print()

# 添加新书籍
new_book = ET.SubElement(root, 'book')
new_book.set('id', '4')

title = ET.SubElement(new_book, 'title')
title.text = 'Machine Learning Basics'

author = ET.SubElement(new_book, 'author')
author.text = 'Emily Brown'

price = ET.SubElement(new_book, 'price')
price.text = '59.99'

# 将修改后的XML文档保存到文件
tree.write('modified_books.xml')

上面示例首先使用 ET.parse() 方法解析名为 books.xml 的 XML 文件,并获取根元素。然后,遍历根元素下的所有书籍元素,提取每本书籍的信息并打印出来。接着,添加了一本新书籍,并将修改后的 XML 文档保存到名为 modified_books.xml 的文件中。

五、使用python-docx操作Word文件

可以使用第三方库python-docx来操作Word文档。这个库提供了一种简单而有效的方式来创建、读取和修改Word文档。

1、安装 python-docx:

python 复制代码
pip install python-docx

2、创建新的Word文档:

可以使用 Document 类创建一个新的Word文档,并向其中添加内容。

python 复制代码
from docx import Document

# 创建一个新的Word文档
doc = Document()

# 添加标题和段落到文档中
doc.add_heading('Document Title', level=1)
doc.add_paragraph('This is a paragraph.')

# 保存文档到文件
doc.save('example.docx')

3、打开并读取现有的Word文档:

使用 Document 类的 open() 方法打开现有的Word文档,并读取其中的内容。

python 复制代码
from docx import Document

# 打开现有的Word文档
doc = Document('example.docx')

# 遍历文档中的段落并打印内容
for paragraph in doc.paragraphs:
    print(paragraph.text)

4、修改现有的Word文档:

读取现有的Word文档,修改其中的内容,并保存修改后的文档。

python 复制代码
from docx import Document

# 打开现有的Word文档
doc = Document('example.docx')

# 修改文档中的内容
for paragraph in doc.paragraphs:
    paragraph.text = 'Modified paragraph.'

# 保存修改后的文档
doc.save('modified_example.docx')

5、添加表格:

可以使用 add_table() 方法来添加一个简单的表格到文档中,然后使用嵌套的循环为每个单元格设置内容。

python 复制代码
from docx import Document

# 创建一个新的Word文档
doc = Document()

# 添加一个简单的表格到文档中
table = doc.add_table(rows=3, cols=3)

# 填充表格单元格的内容
for i in range(3):
    for j in range(3):
        table.cell(i, j).text = f'Cell {i+1}-{j+1}'

# 保存文档到文件
doc.save('table_example.docx')

6、设置表格样式:

使用表格对象的属性来设置表格的样式,例如边框、对齐方式、宽度等。

python 复制代码
from docx import Document
from docx.shared import Pt
from docx.enum.table import WD_ALIGN_VERTICAL

# 创建一个新的Word文档
doc = Document()

# 添加一个简单的表格到文档中
table = doc.add_table(rows=3, cols=3)

# 设置表格样式
table.style = 'Table Grid'

# 设置表格列宽
for cell in table.columns[0].cells:
    cell.width = Pt(100)

# 设置表格的对齐方式
table.alignment = WD_ALIGN_VERTICAL.CENTER

# 填充表格单元格的内容
for i in range(3):
    for j in range(3):
        table.cell(i, j).text = f'Cell {i+1}-{j+1}'

# 保存文档到文件
doc.save('styled_table_example.docx')

7、示例:

python 复制代码
from docx import Document
from docx.shared import Pt
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT

# 创建一个新的Word文档
doc = Document()

# 添加标题和段落到文档中
doc.add_heading('Document Title', level=1)
doc.add_paragraph('This is a paragraph.')

# 添加一个简单的表格到文档中
table = doc.add_table(rows=3, cols=3)

# 设置表格样式
table.style = 'Table Grid'

# 设置表格列宽
for cell in table.columns[0].cells:
    cell.width = Pt(100)

# 设置表格的对齐方式
table.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER

# 填充表格单元格的内容
for i in range(3):
    for j in range(3):
        table.cell(i, j).text = f'Cell {i+1}-{j+1}'

# 保存文档到文件
doc.save('example.docx')

# 打开现有的Word文档并读取内容
doc = Document('example.docx')

# 遍历文档中的段落并打印内容
print("Contents of the document:")
for paragraph in doc.paragraphs:
    print(paragraph.text)
print()

# 修改文档中的内容
for paragraph in doc.paragraphs:
    if 'paragraph' in paragraph.text:
        paragraph.text = 'Modified paragraph.'

# 保存修改后的文档
doc.save('modified_example.docx')

# 打开现有的Word文档并读取修改后的内容
doc = Document('modified_example.docx')

# 遍历文档中的段落并打印修改后的内容
print("Modified contents of the document:")
for paragraph in doc.paragraphs:
    print(paragraph.text)

这个示例首先创建了一个新的Word文档,添加了标题、段落和表格到文档中,并设置了表格的样式。然后,保存了创建好的文档到文件example.docx中。接着,打开了这个新创建的文档,读取了其中的内容,并将读取的内容打印出来。接着,修改了文档中包含'paragraph'的段落,并将修改后的文档保存到文件modified_example.docx中。最后,打开了修改后的文档,并打印出其中修改后的内容。

相关推荐
ephemerals__2 分钟前
【c++丨STL】list模拟实现(附源码)
开发语言·c++·list
码农飞飞6 分钟前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货7 分钟前
Rust 的简介
开发语言·后端·rust
湫ccc15 分钟前
《Python基础》之基本数据类型
开发语言·python
Matlab精灵16 分钟前
Matlab函数中的隐马尔可夫模型
开发语言·matlab·统计学习
Microsoft Word17 分钟前
c++基础语法
开发语言·c++·算法
数据小爬虫@19 分钟前
如何利用java爬虫获得淘宝商品评论
java·开发语言·爬虫
qq_1728055927 分钟前
RUST学习教程-安装教程
开发语言·学习·rust·安装
wjs202434 分钟前
MongoDB 更新集合名
开发语言
monkey_meng38 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust