内容正文:
6.2文件的读写和数据的格式化
程序设计基础Python
同步精品课堂
高教版
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学目标
一
1.掌握文件读取函数、指针操作函数、文件写入函数的语法与功能;
2.理解一维数据、二维数据的概念,初步掌握 csv 模块读取二维数据的方法;
3.能独立完成“读取文件内容”“定位文件指针”“创建并写入文件”“用 csv 处理表格数据”的实操任务。
教学重难点
二
重点
1. 文件读写函数的语法与实际应用;
2. 一维数据、二维数据的概念区分。
难点
1. 文件指针的灵活定位;
2. csv 模块读取二维数据的实操。
导入新课
三
“同学们,咱们平时写的Word文档、存的图片,都是电脑里的‘文件’那Python想操作这些文件,第一步得先‘打开它’,就像咱们开门进房间一样!今天咱们就来学Python里‘文件的打开和关闭’——这可是操作文件的‘入门钥匙’哦~先思考下:你平时打开文件是直接点图标,Python里用什么命令打开呢?”
新知讲授
四
一、文件的读
Python使用内置函数对一个打开的文件进行读操作,读取的内容可以作为一个变量的值。
函数 功能
read([n]) 将文件的全部字符或前n个字符读入到字符串中
readline([n]) 将文件某行的全部字符或前n个字符读入到字符串中
readlines() 将整个文件数据内容按行读入到列表中
文件的读操作函数
新知讲授
四
一、文件的读
<字符串变量名>=<文件对象名>.read([n])
read()函数的格式如下:
01 file_ex=open('ex_en.txt','r')
02 f=file_ex.read()
03 print(f)
04 file_ex.close()
例如:应用read()函数输出文件“ex_en.txt”的内容。
01 file_ex=open('ex_en.txt','r')
02 f=file_ex.read(60)
03 print(f)
04 file_ex.close()
例如:应用read()函数输出文件“ex_en.txt”前60个字符的内容。
新知讲授
四
一、文件的读
例如:应用read()函数输出文件“ex_en.txt”的内容。
新知讲授
四
一、文件的读
例如:应用read()函数输出文件“ex_en.txt”前60个字符的内容。
新知讲授
四
一、文件的读
<字符串变量名>=<文件对象名>. .readline([n])
readline()函数的格式如下:
01 file_ex=open('ex_en.txt','r')
02 f1=file_ex.readline()
03 print(f1,end='')
04 f2=file_ex.readline()
05 print(f2)
06 file_ex.close()
例如:应用readline()函数输出文件“ex_en.txt”的前两行内容。
01 file_ex=open('ex_en.txt','r')
02 f=file_ex.readline(10)
03 print(f)
04 file_ex.close()
例如:应用readline()函数输出文件“ex_en.txt”第一行的前10个字符。
新知讲授
四
一、文件的读
例如:应用readline()函数输出文件“ex_en.txt”的前两行内容。
每使用一次file_ex.readline()就会输出一行。
新知讲授
四
一、文件的读
例如:应用readline()函数输出文件“ex_en.txt”第一行的前10个字符。
新知讲授
四
一、文件的读
<字符串变量名>=<文件对象名>. readlines([n])
readlines()函数的格式如下:
例如:应用readlines()函数应用列表方式输出文件“ex_en.txt”的内容。
01 file_ex=open('ex_en.txt','r')
02 f=file_ex.readlines()
03 print(f)
04 file_ex.close()
新知讲授
四
一、文件的读
例如:应用readlines()函数应用列表方式输出文件“ex_en.txt”的内容。
输出形式以列表输出,返回每个元素为文件一行内容的列表。
新知讲授
四
二、文件指针定位
Python使用内置函数对一个打开的文件进行读写指针定位操作,用来确定文件读写操作的位置。文件读写指针初始值为0。
函数 功能
tell() 返回当前打开文件读写指针的当前位置
seek() 设置当前打开文件读写指针的当前位置
文件指针定位操作函数
新知讲授
四
[<变量名>=]<文件对象名>.tell()
tell()函数的格式如下:
例如:应用tell()函数获取文件“ex_en.txt”读写指针的当前位置。
01 file_ex=open('ex_en.txt','r+')
02 f=file_ex.readline()
03 a=file_ex.tell()
04 print(a)
05 file_ex.close()
二、文件指针定位
新知讲授
四
例如:应用tell()函数获取文件“ex_en.txt”读写指针的当前位置。
执行完f=file_ex.readline(),文件指针所在位置。因为Windows文本文件默认在行末尾是\r
.所以输出是:18
二、文件指针定位
新知讲授
四
[<变量名>=]<文件对象名>.seek(<cookie>[,<whence>])
seek()函数的格式如下:
01 file_ex=open('ex_en.txt','r')
02 file_ex.seek(10)
03 a=file_ex.read(5)
04 print(a)
例如:应用seek()函数将已打开的文件“ex_en.txt”的指针位置定位为第10个字符处,输出'panda'。
<cookie>:
文件指针移动的字符数。
'panda'字符中的字符'p'位于文件“ex_en.txt”第一行数据第11个字符,由于文件读写指针从0开始计数,所以字符'p'的读写指针位置偏离值为10。
二、文件指针定位
新知讲授
四
例如:应用seek()函数将已打开的文件“ex_en.txt”的指针位置定位为第10个字符处,输出'panda'。
执行完file_ex.seek(10),文件指针所在位置。
二、文件指针定位
新知讲授
四
seek()函数<whence>参数表
whence 功能
0 从文件首(BOF)处开始偏移文件指针,默认值
1 从当前位置处开始偏移文件指针,仅对二进制文件有效
2 从文件尾(EOF)处开始偏移文件指针,仅对二进制文件有效
二、文件指针定位
新知讲授
四
seek()函数<whence>参数举例
二、文件指针定位
新知讲授
四
seek()函数<whence>参数举例
01 file_ex=open('ex_en.txt','rb+') #以二进制方式打开文件
02 print(file_ex.tell()) #输出文件读写指针当前位置
03 file_ex.seek(10,0) #文件读写指针=BOF+10(10)
04 file_ex.seek(5,1) #文件读写指针=当前+5(15)
05 file_ex.seek(-3,1) #文件读写指针=当前-3(12)
06 file_ex.seek(8,2) #文件读写指针=EOF+8(EOF)
07 file_ex.seek(-6,2) #文件读写指针=EOF-6
08 print(file_ex.tell()) #输出文件读写指针当前位置
二、文件指针定位
新知讲授
四
三、文件的写
Python使用内置函数对一个打开的文件进行读写指针定位操作,用来确定文件读写操作的位置。文件读写指针初始值为0。
函数 功能
write(<text>) 将字符串<text>写入文件中
writelines(<lines>) 将行列表<lines>写入文件中
文件的写操作函数
新知讲授
四
三、文件的写
<文件对象名>.write(<text>)
write()函数的格式如下:
例如:应用writelines()函数将文件“shuey.txt”中的全部字符追加到文件“ex_en.txt”中。
01 file_ex=open('shuey.txt','r')
02 f=file_ex.readlines()
03 file_ex.close()
04 file_ex=open('ex_en.txt','a+')
05 file_ex.writelines(f)
06 file_ex.seek(0)
07 f=file_ex.read()
08 print(f)
09 file_ex.close()
新知讲授
四
三、文件的写
例如:应用writelines()函数将文件“shuey.txt”中的全部字符追加到文件“ex_en.txt”中。
新知讲授
四
四、文件的读写举例
【例1】编程实现该功能:按行输出文本文件“shuey.txt”数据。
01 file_shuey=open('shuey.txt','r') #以只读方式打开文件shuey.txt
02 while True: #永真循环
03 a= file_shuey.readline() #读文件中的一行
04 if a: #不为空
05 print(a,end='') #输出该行,end=''不输出空白行
06 else: #为空
07 break #退出永真循环
08 file_shuey.close() #关闭文件
新知讲授
四
四、文件的读写举例
【例1】编程实现该功能:按行输出文本文件“shuey.txt”数据。
新知讲授
四
四、文件的读写举例
【例2】编程实现该功能:统计文本文件“shuey.txt”的字符数。
01 i=0 #初始化读写指针计数器
02 s=0 #初始化求和变量s
03 file_shuey=open('shuey.txt','r') #以只读方式打开文件
04 while True: #永真循环
05 file_shuey.seek(i) #读写指针定位
06 a= file_shuey.read(1) #读出一个字符
07 if a: #非空值
08 s=s+1 #字符数累加求和
09 i=i+1 #移动读写指针
10 else: #空值
11 break #退出永真循环
12 print(s) #输出字符数s
13 file_shuey.close() #关闭文件
新知讲授
四
四、文件的读写举例
【例2】编程实现该功能:统计文本文件“shuey.txt”的字符数。
新知讲授
四
四、文件的读写举例
【例3】编程完成以下操作:创建文件“ex_cr.txt”,并从键盘输入该文件的数据内容。
01 i=1 #初始化行数计数器
02 file_cr=open('ex_cr.txt','x+') #创建文本文件
03 while True: #永真循环
04 a='第'+str(i)+'行数据:' #定义输入提示符
05 print(a,end='') #输出提示符
06 b=input() #输入数据行
07 b=b+'/n' #强制加入换行符
08 file_cr.write(b) #数据行写入新建文件
09 c='继续输入(Y/N)?' #继续输入提示符
10 print(c,end='') #输出提示符
新知讲授
四
四、文件的读写举例
【例3】编程完成以下操作:创建文件“ex_cr.txt”,并从键盘输入该文件的数据内容。
11 d=input() #输入Y或N
12 if d.lower()=='n': #输入N,表示不再输入数据
13 break #退出永真循环
14 else: #输入Y,继续输入数据
15 i=i+1 #行计数器累加
16 file_cr.seek(0) #读写指针定位于BOF
17 f=file_cr.read() #读出文件全部内容
18 print(f) #输出文件全部内容
19 file_cr.close() #关闭文件
新知讲授
四
四、文件的读写举例
【例3】编程完成以下操作:创建文件“ex_cr.txt”,并从键盘输入该文件的数据内容。
新知讲授
四
五、数据文件类型
数据文件主要有文本文件和二进制文件两种类型。
文本文件:
由一种基于特定编码的字符构成,通常由文本编辑器或文档处理软件建立。
编码格式 说明
ANSI 计算机系统预设的标准文字储存格式。
Unicode 国际通用编码字符集。
UTF-8 通用字集转换格式,Unicode的8位元格式。
文本文件的编码格式
新知讲授
四
五、数据文件类型
<对象名>=open(<文件名>[,<打开模式>[,<encoding=<编码格式>>]])
在打开文本文件时,应当注意其编码格式。如若要显示文件中汉字内容,通常应用UTF-8编码格式。
带有编码格式的文件打开函数格式如下:
新知讲授
四
五、数据文件类型
例如:应用open()函数打开文件“ex_cn.txt”,对象名为file_ex,读出文件内容。
01 file_ex=open('ex_cn.txt','r+',encoding='utf-8')
02 f=file_ex.read()
03 print(f)
04 file_ex.close()
新知讲授
四
五、数据文件类型
例如:应用open()函数打开文件“ex_cn.txt”,对象名为file_ex,读出文件内容。
新知讲授
四
五、数据文件类型
01 file_ex=open('ex_cn.txt','rb+')
02 f=file_ex.readline()
03 print(f)
例如:应用open()函数以二进制文件形式打开“ex_cn.txt”,对象名为file_ex,读出该文件第一行内容,其读出的内容为一系列非可识别符号。
二进制文件
由二进制数据0和1构成,按照非字符编码但以特定字节格式形成的文件,如文档、图片、视频、音频等字节流文件。二进制文件一般由相应的应用程序创建。二进制文件的打开不能使用encoding参数。
新知讲授
四
五、数据文件类型
例如:应用open()函数以二进制文件形式打开“ex_cn.txt”,对象名为file_ex,读出该文件第一行内容,其读出的内容为一系列非可识别符号。
新知讲授
四
六、数据的格式化
01 kc=['德育','语文','数学','体育','信息技术']
例如:中职所有公共文化课按列表形式表示,就构成了一个一维数据。
数据的格式化
将数据按照一定的结构进行整理组织,形成有效信息的过程。格式化数据具有维度,Python支持一维数据和二维数据。
一维数据
以线性结构组织的数据。常见的一维数据有数组、列表和集合等。一维数据通常以结构化的文本文件形式保存在磁盘中,数据之间可以空格、逗号、‘/’等分隔符分开。
01 jk01=('柴思*', '女',7.9,196,21)
02 jk02=( '李雪* ', '女',7.2,196,20)
例如:某班学生体育健康测试数据按元组形式表示,也构成了一个一维数据。
新知讲授
四
六、数据的格式化
例如:下列数据中是以表格形式加以组织的,就形成了一个二维数据。
二维数据
以表格形式组织的数据,也称之为二维表。
二维数据也是以结构化的文本文件形式保存在磁盘中,其中指将数据列用逗号分隔的文件是较为常用的数据交换格式,称之为CSV文件。
可以保存为CSV文件“ex.csv”。
新知讲授
四
六、数据的格式化
01 import csv #调入csv模块
02 f=open('ex.csv',‘a+’) #打开文件ex.csv
03 r_ex=csv.reader(f) #定义reader对象
04 print(r_ex) #输出reader对象r_ex的地址
05 f.close() #关闭文件ex.csv
定义SV文件“ex.csv”的reader对象为r_ex的代码如下:
Python的csv模块主要进行reader对象和writer对象的操作。
reader对象的定义:
<对象名>=csv.reader(<文件对象名>)
新知讲授
四
六、数据的格式化
01 import csv
02 f=open('ex.csv',‘a+’)
03 r_ex=csv.reader(f)
04 print(r_ex)
05 f.close()
新知讲授
四
六、数据的格式化
writer对象的定义:
<对象名>=csv.writer(<文件对象名>)
writer对象的操作:
<writer对象名>.writerow(<一维列表>)
#CSV文件中写入单行
<writer对象名>.writerows(<二维列表>)
#CSV文件中写入多行
新知讲授
四
六、数据的格式化
01 import csv #调入csv模块
02 f=open('ex.csv','w+') #打开文件ex.csv
03 w_ex=csv.writer(f) #定义writer对象
04 hd=['姓名','性别','50米跑','立定跳远','坐位体前屈'] #表头数据
05 sj=[['柴思*','女',7.9,196,21],['李雪*','女',7.2,196,20]] #前二行数据
06 w_ex.writerow(hd) #写入表头
07 w_ex.writerows(sj) #写入二行数据
08 f.close() #关闭文件ex.csv
定义CSV文件“ex.csv”的writer对象为w_ex,并写入表6-1-8中表头和前二行数据的代码如下:
新知讲授
四
六、数据的格式化
【例1】编程完成以下操作:打开文件'ex_cn.txt',逐行输出文件内容。
01 file_cn=open('ex_cn.txt','r’,encoding='utf-8 ') #打开UTF-8文件
02 while True: #永真循环
03 a= file_cn.readline() #读取数据行
04 if a: #非空值
05 print(a,end='') #输出数据行
06 else: #空值
07 break #退出永真循环
08 file_cn.close() #关闭文件
新知讲授
四
六、数据的格式化
【例1】编程完成以下操作:打开文件'ex_cn.txt',逐行输出文件内容。
新知讲授
四
六、数据的格式化
【例2】编程完成以下操作:创建CSV文件' ex_1.csv ',输入数据(表6-1-8),并输出文件内容。
6-1-8
新知讲授
四
六、数据的格式化
【例2】编程完成以下操作:创建CSV文件' ex_1.csv ',输入数据(表6-1-8),并输出文件内容。
注意:PyCharm如果提示“File was loaded in the wrong encoding: UTF-8”(文件以错误的编码UTF-8加载)。
具体原因是文件实际编码(比如GBK)和PyCharm当前使用的编码(UTF-8)不一致,所以中文内容显示成了乱码。
PyCharm也给出了修复选项:可以点击“Reload in GBK”(用GBK重新加载),或者“Set project encoding to GBK”(将项目编码设为GBK)来解决乱码问题。
师生互动
五
文件读取函数区分
老师展示课本表6-1-2:文件读取操作函数,提问:
“同学们看这三个读取函数,要是我想把文件里的内容按每一行存成列表里的元素,该用哪个函数呀?”
请1位学生回答后,追问:“那 read() 和 readline() 的区别是什么呢?谁能举个例子说说”
师生互动
五
文件指针“侦探”
老师展示课本中 tell() 的示例代码:readline 后用 tell() 得到19,提问:
“ tell() 函数是用来干嘛的呀?”
待学生回答“获取指针位置”后,追问:“那这个例子里 readline() 之后指针位置是19,有没有同学能猜猜为啥是19呀?”
引导学生结合文本内容的字符数如:第一行“The giant panda,”的字符数来理解指针的移动。
随堂练习
1. 要读取文件的前5个字符,应使用哪个函数?
A. read(5) B. readline(5) C. readlines(5) D. tell(5)
【答案】A
【解析】 read([n]) 的功能是读取文件全部字符或前n个字符到字符串中,因此选A。
六
随堂练习
2. 函数 readlines() 的返回结果类型是?
A. 字符串 B. 列表 C. 整数 D. 字典
【答案】B
【解析】 readlines() 会将文件内容按行读取到列表中,返回结果为列表类型。
六
随堂练习
3. 用于获取文件当前读写指针位置的函数是?
A. seek() B. tell() C. read() D. write()
【答案】B
【解析】tell() 函数的功能是返回当前打开文件读写指针的位置。
六
随堂练习
4.seek() 函数中, whence 参数为0表示?
A. 从当前位置开始移动 B. 从文件首开始移动
C. 从文件尾开始移动 D. 仅对二进制文件有效
【答案】B
【解析】 whence 参数为0时,是从文件首处开始移动指针,为默认值。
六
随堂练习
5.要将列表内容写入文件,应使用哪个函数?
A. write() B. writelines() C. readlines() D. tell()
【答案】B
【解析】 writelines() 的功能是将序列写入文件中。
六
随堂练习
6. 下列属于文本文件编码格式的是?
A. PNG B. UTF-8 C. MP4 D. JPG
【答案】B
【解析】文本文件的主要编码格式包括UTF-8;A、C、D均为二进制文件格式。
六
随堂练习
7.打开二进制文件时,不能设置的参数是?
A. 'rb' B. encoding C. 'wb' D. 'ab'
【答案】B
【解析】打开二进制文件时不能设置 encoding 参数。
六
随堂练习
8.以线性结构组织的数据属于?
A. 一维数据 B. 二维数据 C. 三维数据 D. 四维数据
【答案】A
【解析】一维数据是以线性结构组织的数据,常见形式有列表、数组等。
六
课堂小结
八
谢谢
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
EV录屏5.4.1软件录制
Lavf58.33.100
本视频由湖南一唯信息科技开发的EV录屏软件录制, www.ieway.cn
$