先介绍使用Python对文本文件的操作,再介绍使用Python对word文件的操作。
在 Python 中要操作文本文件需要记住几个函数和方法:
open函数,打开文件,并且返回文件操作对象
read和readline 、readlines方法,将文件内容读取到内存
write方法,将指定内容写入文件
close方法,关闭文件
open函数
在Python语言中,负责文件操作的称为文件对象,文件对象不仅可以访问存储在磁盘中的文件,也可以访问网络文件。
通过文件句柄进行文件操作,会用到open函数。
Python中用于访问文件的open函数,应用Python提供的open函数可以返回文件对象。open函数提供了输入/输出操作的通用接口,open函数成功打开文件后会返回一个文件对象,打开失败时会抛出异常IOError。open函数的基本语法如下:
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
open函数有八个参数,分别是fileName、mode、buffering、encoding、errors、newline、closefd、opener,比较重要的是前四个参数,除了fileName参数外,其它都有默认值,因此使用open函数时,不需要传入全部参数。
下面重点对前四个参数予以详细说明:
☆fileName指定了要打开的文件名称,fileName的数据类型为字符串,fileName也包含了文件所在的存储路径,存储路径可以是相对路径,此时文件在工程目录下面f=open('test.txt','r'),也可以是绝对路径,此时可任意指定目录,比如f=open('d:/ pythonDemo/test.txt','r')
☆mode指定了文件的打开模式,也就是设定文件的打开权限。文件的打开模式有:
☆buffering用于指定打开文件所用的缓冲方式,缓冲是指用于读取文件的缓冲区,缓冲区就是一段内存区域。设置缓冲区的目的是先把文件内容读取到缓冲区,可以减少CPU读取磁盘的次数。Buffering为0时表示不缓冲,为1时表示只缓冲一行数据,为-1时表示使用系统默认缓冲机制,默认为-1。任何大于1的值表示使用给定的的值作为缓冲区大小。一般情况下使用函数默认值即可。
☆encoding用于指定文件的编码方式,默认采用utf-8,编码方式主要是指文件中的字符编码。我们经常会碰到这样的情况,当打开一个文件时,内容全部是乱码,这是因为创建文件时采用的编码方式,和打开文件时的编码方式不一样,就会造成字符显示错误,看上去就是乱码。
文件操作的流程
1. 打开文件,得到文件对象(有资料说是句柄)一个变量
2. 通过句柄对文件进行操作
3. 关闭文件
例1、用记事本先建立一个test.txt文件,通过文件句柄读取这个文件。
test.txt文件的内容如下:
这是python测试文件
good!
新建一个pyTest01.py代码文件内容如下:
filename = 'test.txt'
f = open(filename,'r',encoding='utf-8') #打开文件
context = f.read() #文件进行操作
print(context)
f.close() #关闭文件
运行结果:
不要小看关闭文件这一步,因为我们读取文件是把文科读取到内存中的,如果我们没关闭它,它就会一直占用系统资源,而且还可能导致其他不安全隐患。还有一种方法可以让我们不用去特意关注关闭文件。那就是 with open()。示例如下。
例2、使用with open()的代码文件pyTest02.py内容如下:
filename = 'test.txt'
with open(filename,'r',encoding='utf-8') as f: #打开文件
context = f.read() #文件进行操作
print(context)
运行结果和上例一样。
write方法
写数据:使用write(“content”),可以完成向文件写入数据,注意:如果文件不存在那么创建,如果存在那么就先清空文件(覆盖),然后写入数据到文件里.。
例3、给test.txt文件追加两行文本
filename = 'test.txt'
f = open(filename,'a',encoding='utf-8') #打开文件,追加
f.write('hello,你好\n') #换行符\n
f.write('呵呵,哈哈\n')
f.close() #关闭文件
read和readline 、readlines方法
读数据:使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(字符个数),如果没有传入num或者为负,那么就表示读取文件中所有的数据,read()将读取的数据以字符串的形式返回。注意:
如果使用read读了多次,那么后面继续使用read读取的数据是从上次读完后的位置开始的
注意:read ()方法默认会把文件的所有内容 一次性读取到内存,当然可以指定读取的字符数。如果文件太大,对内存的占用会非常严重。
readlines()可以按照行的方式把整个文件中的内容进行一次性读取,读取所有行(直到结束符 EOF)并返回列表,并且返回的是一个列表,其中每一行(按着换行符进行判断一行)的数据为一个元素。
readline(),对原文件的数据按行读取,(行的划分是\n).每次只读取一行。如果有多次读取的话,下面一次读取的偏移量是上面读取后的偏移量。
例4、读取test.txt文件中的文本4个字符
filename = 'test.txt'
f = open(filename,'r',encoding='utf-8') #打开文件
content=f.read(4) #读取4个字符
print("读取的内容:%s"%content)
f.close()
上面介绍的是使用Python对文本文件的操作,下面介绍使用Python对word文件的操作。
使用Python对word文件进行操作
可以使用开发包有python-docx、pypiwin32等。
先介绍使用python-docx开发包操作word文档
想要Python获得操作docx文档的能力,得先安装docx开发包。打开命令行窗口cmd,输入:pip install python-docx。稍等片刻就安装好了。
【查看python第三方模块(库、包)是否安装及其版本号
在cmd中输入python -m pip list 或 pip list】
现在看看如何对word文档进行操作的代码:
#在对word文档编辑之前需要导入Document模块
from docx import Document
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
from docx.shared import Inches
from docx.shared import Pt
from docx.shared import RGBColor
from docx.oxml.ns import qn
# 声明一个word对象
doc = Document()
# 设置字体样式
doc.styles['Normal'].font.name = u'宋体'
doc.styles['Normal'].element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
# ------添加文档标题-------
paragraph = doc.add_paragraph()
run = paragraph.add_run("使用Python对word文档进行操作")
font = run.font
# 设置字体大小
font.size = Pt(24)
# 设置水平居中
paragraph_format = paragraph.paragraph_format
paragraph_format.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
# ------添加一段话-------
content = "这是一个python-docx基础操作实例演示"
paragraph = doc.add_paragraph(content)
paragraph_format = paragraph.paragraph_format
# 第一行左边缩进
paragraph_format.first_line_indent = Inches(0.3)
# -----添加一个小标题------
paragraph = doc.add_paragraph()
run = paragraph.add_run("呵呵,哈哈")
paragraph_format = paragraph.paragraph_format
# 段前
paragraph_format.space_after = Pt(15)
# 段后
paragraph_format.space_before = Pt(2)
# 字体加粗和下划线
font = run.font
font.bold = True
# ----加入文本-----
content = "hello, world!\n你好,世界,本文演示练习使用Python对word文档进行操作。\n"
paragraph = doc.add_paragraph(content)
# 添加下划线
run = paragraph.add_run("什么是下划线?将在此句演示!")
font = run.font
font.underline = True
# 插入表格和内容
table = doc.add_table(rows=3, cols=2, style="Medium Grid 1 Accent 1")
table.cell(0, 0).text = "Python"
table.cell(0, 1).text = "跨平台编程语言"
table.cell(1, 0).text = "跨平台"
table.cell(1, 1).text = "Windows、macOS、Ubuntu等"
table.cell(2, 0).text = "用途"
table.cell(2, 1).text = "人工智能、Web、桌面系统..."
# -----设置字体颜色------
doc.add_paragraph()
doc.add_paragraph("下面分页")
# 插入一个分页符
doc.add_page_break()
paragraph = doc.add_paragraph()
run = paragraph.add_run("下面插入图片,本例中需要在本源码文件所在的目录中有名为good.png的图片,否则出错。")
font = run.font
font.color.rgb = RGBColor(0xFF, 0x00, 0x00)
# -----添加图片,设置图片大小------
doc.add_picture(r"good.png", width=Inches(6.25))
# ------保存word文档到当前目录下-------
doc.save('demo.docx')
运行上面的代码将本源码文件所在的目录中生成名为demo.docx的文件。
关于python-docx可以参考
https://www.cnblogs.com/sheng-yang/p/10599529.html
https://www.cnblogs.com/anpengapple/tag/python-docx/
https://www.cnblogs.com/z123zero/p/10770097.html
https://www.csdn.net/gather_21/Mtjagg2sMTA0LWJsb2cO0O0O.html
使用pypiwin32开发包操作word文档
安装pypiwin32,打开命令行窗口cmd,输入:
pip install pypiwin32
现在看看对word文档进行操作的代码:
from win32com.client import Dispatch
app = Dispatch('Word.Application')
# 新建word文档
doc = app.Documents.Add()
# 如何显示Word
app.Visible = 1
关于pypiwin32可以参考
https://blog.csdn.net/chinajobs/article/details/52860122
https://blog.csdn.net/weixin_43519457/article/details/89113293