赞
踩
项目9 读写文件内容
1
9.1 了解文件的概念及分类
▪ 为了长期保存数据以便重复使用、修改和共享,必须将数据以文件的形式存 储到外部存储介质(如磁盘、U盘、光盘或云盘、网盘、快盘等)中。 ▪ 文件操作在各类应用软件的开发中均占有重要的地位: ✓ 管理信息系统是使用数据库来存储数据的,而数据库最终还是要以文件的形式存储到 硬盘或其它存储介质上。 ✓ 应用程序的配置信息往往也是使用文件来存储的,图形、图像、音频、视频、可执行 文件等等也都是以文件的形式存储在磁盘上的。 |
2
9.1 了解文件的概念及分类
▪ 按文件中数据的组织形式把文件分为文本文件和二进制文件两类。 ✓ 文本文件:文本文件存储的是常规字符串,由若干文本行组成,通常每行以换行符'\n'结 尾。常规字符串是指记事本或其他文本编辑器能正常显示、编辑并且人类能够直接阅读和 理解的字符串,如英文字母、汉字、数字字符串。文本文件可以使用字处理软件如gedit、记事本进行编辑。 ✓ 二进制文件:二进制文件把对象内容以字节串(bytes)进行存储,无法用记事本或其他普通 字处理软件直接进行编辑,通常也无法被人类直接阅读和理解,需要使用专门的软件进行 解码后读取、显示、修改或执行。常见的如图形图像文件、音视频文件、可执行文件、资 源文件、各种数据库文件、各类office文档等都属于二进制文件。 |
3
9.2 了解文件操作基本知识
• 无论是文本文件还是二进制文件,其操作流程基本都是一致的,首先打开文 件并创建文件对象,然后通过该文件对象对文件内容进行读取、写入、删除、 修改等操作,最后关闭并保存文件内容。 |
4
9.2.1 内置函数open()
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) ✓ file参数指定了被打开的文件名称。 ✓mode参数指定了打开文件后的处理方式。 ✓buffering参数指定了读写文件的缓存模式。0表示不缓存,1表示缓存,如大于1则表示缓冲区的 大小。默认值是缓存模式。 ✓encoding参数指定对文本进行编码和解码的方式,只适用于文本模式,可以使用Python支持的 任何格式,如GBK、utf8、CP936等等。 |
5
9.2.1 内置函数open()
• 文件打开模式
|
6
9.2.1 内置函数open()
▪ 如果执行正常,open()函数返回1个文件对象,通过该文件对象可以对文件 进行读写操作。如果指定文件不存在、访问权限不够、磁盘空间不足或其他 原因导致创建文件对象失败则抛出异常。 f1 = open(‘D:\金山办公项目班\gt.txt’) #文件不存在抛出异常 f1 = open( 'file1.txt', 'r' ) # 以读模式打开文件 f2 = open( 'file2.txt', 'w') # 以写模式打开文件 ▪ 当对文件内容操作完以后,一定要关闭文件对象,这样才能保证所做的任何 修改都确实被保存到文件中。 f1.close() |
7
9.2.2 文件对象属性与常用方法
|
8
9.2.3 上下文管理语句with
• 在实际开发中,读写文件应优先考虑使用上下文管理语句with,关键字with 可以自动管理资源,不论因为什么原因(哪怕是代码引发了异常)跳出with 块,总能保证文件被正确关闭,并且可以在代码块执行完毕后自动还原进入 该代码块时的上下文,常用于文件操作、数据库连接、网络连接、多线程与 多进程同步时的锁对象管理等场合。 with open(filename, mode, encoding) as fp: #这里写通过文件对象fp读写文件内容的语句 |
9
9.3 文本文件内容操作
▪ 例9-1 向文本文件中写入内容,然后再读出。 s = 'Hello world\n文本文件的读取方法\n文本文件的写入方法\n' with open(r'C:\Users\HUAWEI\Desktop\sample.txt', 'wt')as fp:#默认使用cp936编码 fp.write(s) with open(r'C:\Users\HUAWEI\Desktop\sample.txt', 'rt') as fp:#默认使用cp936编码 print(fp.read()) |
10
9.3 文本文件内容操作
• 例9-2 遍历并输出文本文件的所有行内容。 with open(r‘C:\Users\HUAWEI\Desktop\sample.txt’, ‘rt’) as fp: #读出一行 print(fp.readline()) #读出所有行-遍历 |
11
9.3 文本文件内容操作案例精选
• 例9-3 假设文件data.txt中有若干整数,每行一个整数,编写程序读取所有整数,将其按降序排序后再 写入文本文件data_asc.txt中。 n = '2\n4\n43\n5\n0\n49\n23\n12' with open(r’C:\Users\HUAWEI\Desktop\data.txt’, ‘rt’) as fp1: #查看文件data.txt print(fp1.readlines()) |
12
9.3 文本文件内容操作案例精选
• 例9-3 假设文件data.txt中有若干整数,每行一个整数,编写程序读取所有整数,将其按降序排序后再 写入文本文件data_asc.txt中。 with open(r'C:\Users\HUAWEI\Desktop\data.txt', 'r') as fp: fp.writelines(data) with open(r'C:\Users\HUAWEI\Desktop\data_desc.txt', 'rt') as fp: #将结果写入文件 print(fp.readlines()) |
fp.close()
13
9.3 文本文件内容操作
• 例9-4 统计文本文件中最长行的长度和该行的内容。 with open(r'C:\Users\HUAWEI\Desktop\sample.txt') as fp: result = [0, ''] |
14
9.4 Excel与Word文件操作
• 例9-5 统计docx文档段落、表格、图片、字符、空格的数量。 • Pip install python-docx #安装扩展库 • Document类,创建Word文档的对象obj(表示整个文档) • Document 对象包含一个 Paragrapha 对象的列表,Paragraph 对象包含一个 Run 对象的列表。 • obj.inline_shapes包含所有内嵌类型(主要是图片) • Run 对象标识相同样式的文本。 • obj.paragraphs包含所有段落 • obj.tables包含所有表格 |
15
9.4 Excel与Word文件操作
from docx import Document fn = input('请输入docx文件名:')
#统计图片数量 |
• 例9-5 统计docx文档段落、表格、图片、字符、空格的数量。 |
16
9.4 Excel与Word文件操作
• 例9-6 简体中文Word文档转为繁体版。 from langconv import Converter def convert(text, flag=0): obj = Document(r'C:\Users\HUAWEI\Desktop\花儿汇.docx')
for t in obj.tables: obj.save(r'C:\Users\HUAWEI\Desktop\花儿汇繁体.docx') |
17
9.4 Excel与Word文件操作
|
18
9.4 Excel与Word文件操作
• 例9-8 已知某Excel文件中存储了几个人的爱好,要求编写程序,操作该文件,追加一列,按行对每个人 的爱好进行汇总。如图9-1所示,最后一列为处理后追加的内容。 pip install openpyxl |
19
9.4 Excel与Word文件操作
from openpyxl import load_workbook wb = load_workbook(r'C:\Users\HUAWEI\Desktop\每个人的爱好.xlsx') |
wb.save(r'C:\Users\HUAWEI\Desktop\每个人的爱好汇总.xlsx') | 20 |
9.4 Excel与Word文件操作
• 例9-9 编写程序,在当前文件夹中查找包含特定字符串的所有docx、xlsx和 pptx文件。 pip install openpyxl from sys import argv |
21
9.4 Excel与Word文件操作
def checkdocx(dstStr, fn): |
22
9.4 Excel与Word文件操作
def checkxlsx(dstStr, fn): |
23
9.4 Excel与Word文件操作
def checkpptx(dstStr, fn):
elif shape.shape_type == 14: |
return True | |
except: | 24 |
pass |
9.4 Excel与Word文件操作
def main(dstStr, flag): |
25
9.4 Excel与Word文件操作
# argv[0]为程序文件名 main(dstStr, flag) |
26
9.4 Excel与Word文件操作
• 例9-10 已知文件“超市营业额.xlsx”中记录了某超市2019年3月1日至5日各员 工在不同时段、不同柜台的销售额。部分数据如图9-2所示,要求编写程序,读取该文件中的数据,并统计每个员工的销售总额、每个时段的销售总额、每个柜台的销售总额。 |
27
9.4 Excel与Word文件操作
from openpyxl import load_workbook # 3个字典分别存储按员工、按时段、按柜台的销售总额 persons = dict() periods = dict() goods = dict() for index, row in enumerate(ws.rows): if index==0: continue _, name, _, time, num, good = map(lambda cell: cell.value, row) # 根据每行的值更新三个字典 persons[name] = persons.get(name, 0)+num periods[time] = periods.get(time, 0)+num goods[good] = goods.get(good, 0)+num print(persons) |
print(periods) | |
print(goods) | 29 |
36
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。