1. 概要
在办公处理中,我们常常要打开一些文件,面临大量的数据时,传统的人工方法耗时耗力。在python中,有一系列包装好的库,让我们能够很方便的操作各种类型的文件。当然,python的内置函数也能够很好的打开一些文件。本文主要探讨python打开各类文件的方式。本文介绍的主题内容如下所示:
2. 操作txt文本文件
2.1 打开模式
file = open(path,'r')
我们可以用多种不同的方式去打开txt文件,具体类型如下:
类型 | 读写操作 | 备注 |
---|---|---|
r | 只读 | / |
w | 只写 | 覆盖 |
a | 只写 | 追加 |
r+ | 可读可写 | 覆盖 |
w+ | 可读可写 | 覆盖 |
a+ | 可读可写 | 追加 |
不同的打开模式获得不同的权限。另外,使用w、a以及w+、a+模式打开不存在的文件时,系统会创建一个文件,而使用 r 和 r+ 则会报错。
2.2 读取方式
一般情况下,如果只是要读取文件内的内容,那么我们可以不输入打开模式参数,默认为”r”。
(1)read()
read() 一次性读全部内容 一次性读取文本中全部的内容,以字符串的形式返回结果。
f = open('example.txt',encoding = 'utf-8')content = f.read()print(content)f.close()
打印出来的结果如下所示:
当你老了头发花白
你会发现输出出来的文本样式,和在记事本里看到的基本一致。注意,两行之间存在换行符。
(2)readline()
readline() 读取第一行内容,只读取文本第一行的内容,以字符串的形式返回结果。这个函数一般用于循环读取,将每一行的内容作为元素装入列表。
f=open('example.txt', encoding='utf-8')line = f.readline().strip() #读取第一行txt=[]txt.append(line)while line: # 直到读取完文件 line = f.readline().strip() # 读取一行文件,包括换行符 txt.append(line)f.close() # 关闭文件print(txt)
输出的结果如下所示:
['当你老了', '头发花白', '']
这里每个字符串末尾之所以没有出现换行符,是因为使用**strip()**函数进行了处理。另外我们也可以像下面这样,处理文本文件的每一行,其本质是和上面一样的。
txt = []for line in f:......
(3)readlines()
readlines()读取文本所有内容,并且以数列的格式返回结果。这里返回的结果其实是和上面使用 readline() 逐行读取的结果是一样的,不再过多展示。
f=open('example.txt',encoding='utf-8')data = f.readlines() f.close() print(data) #返回list
2.3 写入文件
在文件中写入内容,需要打开文件,主要用到 write() 函数。注意 wirte() 写入后默认不换行。
f = open('example.txt','a+',encoding = 'utf-8') # 选择了可读可写的追加模式f.write('\n睡意沉沉')f.close()f=open('example.txt',encoding='utf-8')print(f.read())f.close()
打印出的结果如下所示:
当你老了头发花白睡意沉沉
注意,这里我们在写入后先关闭了文件,而后再重新打开文件读取。因为 readline() 和readlines() 以及 read() 函数都是根据指针进行读取的,如果直接在写完以后进行读取,那么读到的一定是空白。
3. 读取excel文件数据
打开excel的方式有很多,本文主要介绍一种方法,使用pandas将excel数据转化为dataframe结构。
import pandas as pddf = pd.read_excel('example.xlsx',sheet_name = 'Sheet1',converters={'id':str})df.head()
通过“sheet_name”指定对应得工作表。另外,在excel中,有一些编码信息,如学号或者id,可能以0开头,在默认情况下python会将其理解为整数!并将其前面的0给截断。所以使用后面得 converters 参数进行以后类型转换。
现在,python有很多开发好的优秀的处理excel的包,如openpyxl、xlwt,但如果仅仅是为了读取数据,其实使用pandas就已经非常足够了。但如果是要对 excel 文件进行编辑操作的话,我更加推荐的是使用 openpyxl 库,这里不再过多介绍。
pandas中得dataframe是一个很强大的数据结构,能够很快的索引到想要的信息。在本例中,示例文件中的数据如下所示:
id | age | weight |
---|---|---|
001 | 14 | 60 |
002 | 15 | 65 |
003 | 16 | 62 |
004 | 17 | 64 |
005 | 18 | 65 |
获取某一列的数据,这里其实返回的是一个series结构。
id_s = df['id']
获取某一行的数据,并获取该行的单独某一项。
temp = df.iloc[0]print(temp,end = '\n\n')print(temp.id,temp.age,temp.weight)
该代码的运行结果如下所示:
id 001age 14weight 60.0Name: 0, dtype: object001 14 60.0
4. 读取PDF–PyMuPdf
PDF(Portable Document Format)是一种便携文档格式,便于跨操作系统传播文档。PDF文档遵循标准格式,因此存在很多可以操作PDF文档的工具,Python自然也不例外。本文主要介绍一种好用的的 python-pdf 包——PyMuPdf。
PyMuPDF是MuPDF的Python绑定——一个轻量级的PDF,XPS和电子书查看器,渲染器和工具包,由Artifex软件公司维护和开发。
打开一个文件。
doc = fitz.open(filename)
常见方法和属性:
Method / Attribute | Description |
---|---|
Document.page_count | the number of pages (int) |
Document.metadata | the metadata (dict) |
Document.get_toc() | get the table of contents (list) |
Document.load_page() | read a page |
如何读取pdf文件内的全部文本:
import fitz# 定义一个函数,根据文件路径读取pdf文件,并返回pdf文本的字符串def read_pdf(path): doc = fitz.open(path) txt = '' for page in doc.pages(): temp = page.get_text() txt += temp return txt
为什么选择PyMuPDF?对比其它的开源包,它最大的特点就是运行速度较快,毕竟谁也不想花很长时间等待运行结果。除了简单的读取文本,该库还支持读取图片、读取表格、高亮标记等一系列功能,更多详情请见官方文档。
5. Word的读取与写入
这里主要介绍python-docx。先简单了解一下Word
文档。和纯文本(比如txt
)相比, .docx
文件有很多种结构,这些结构在python-docx
中用3种不同的类型来表示:最高一层是Document
对象表示文档,每个Document
对象包含一个Paragraph
对象也就是段落组成的列表,而每个Paragraph对象则包含一个Run
对象的列表。
也可以用它来处理表格,基本结构如下:
python-docx
将文章中所有的表格都存放在document.tables
中- 每个
Table
都有对应的行table. rows
、列table. columns
和单元格(table. cell()
) - 单元格是最基本的单位,每个单元格又被划分成不同的
Paragraph
对象
具体的结构图如下所示:
5.1 读取文档
下面我们通过python-docx来读取word文档,并查看相关属性。
import docx# 读取Word文档doc = docx.Document(r'python.docx')print( len(doc.paragraphs)) # 查看段落数量print(doc.paragraphs[0].text) # 查看第一段的内容# print(doc.paragraphs[0].runs) # 查看第一段的run对象print(len(doc.paragraphs[0].runs)) # 查看第一段中run对象的个数for i in range(10): print(doc.paragraphs[0].runs[i].text,end = ' ')
如果要读取word的完整文本内容,我们自定义一个函数,使用换行符来分隔开每一段。
def getText(fileName): doc = docx.Document(fileName) TextList = [] for paragraph in doc.paragraphs: TextList.append(paragraph.text) return '\n'.join(TextList)
5.2 写入文档
对于Run
对象的字符text
属性,都有3个状态:True
(启用)、False
(禁用)和None
(默认)。text的常见属性如下:
属性 | 描述 |
---|---|
bold | 文本以粗体出现 |
italic | 文本以斜体出现 |
underline | 文本带下划线 |
strike | 文本带删除线 |
double_strike | 文本带双删除线 |
接下来我们看看如何创建并写入Word,要创建自己的.docx
文件,就调用 docx.Document()
,返回一个新的、空白的 Word Document
对象 。Document
对象的 add_paragraph()
方法将一段新文本添加到文档中,并返回添加的 Paragraph 对象的引用。
import docxdoc = docx.Document()doc.add_paragraph('这是一个段落')doc.add_run('加粗的一句话').bold = Truedoc.add_paragraph('这是第二个段落')doc.save('多段落.docx')
常用的添加方法:
方法 | 作用 |
---|---|
add_paragraph() | 添加段落 |
add_run() | 在当前段落尾加上词 / 句 |
add_break() | 添加换行符(仍然当前段落) |
add_picture | 在段落末尾添加图像 |
6. 参考资料
【1】python读取txt文件(多种方法)总裁余(余登武)的博客
【2】python读取、写入txt文本内容
【3】使用Python操作PDF:常用PDF库总结
【4】Recipes: Text — PyMuPDF 1.20.2 documentation
【5】用Python读写Word文档入门 – 腾讯云开发者社区-腾讯云 (tencent.com)
【6】python docx 使用总结 – 简书 (jianshu.com)