1 / 19

计算机编程导论

计算机编程导论. 课程建设组 编著. 2012.9. 第 6 章 文件的使用. 为了长期保存数据,方便修改和 共享 ,就必须将数据以文件的形式存储到外部存储介质 ( 如磁盘 ) 中。 MIS 是使用数据库来存储数据的,而应用程序的配置信息是使用文件来存储的;图形、图像通常也是用文件来存储的。文件在软件开发中占有重要的地位,程序设计者应该掌握文件的基本原理和基本操作。. 第 6 章 文件的使用. 6.1 与文件有关的问题 6.2 文件基础知识 6.2.1 文件的打开或创建 6.2.2 字符编码 6.2.3 文本文件的写入

pia
Télécharger la présentation

计算机编程导论

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 计算机编程导论 课程建设组 编著 2012.9

  2. 第6章 文件的使用 为了长期保存数据,方便修改和共享,就必须将数据以文件的形式存储到外部存储介质(如磁盘)中。MIS是使用数据库来存储数据的,而应用程序的配置信息是使用文件来存储的;图形、图像通常也是用文件来存储的。文件在软件开发中占有重要的地位,程序设计者应该掌握文件的基本原理和基本操作。

  3. 第6章 文件的使用 • 6.1 与文件有关的问题 • 6.2 文件基础知识 6.2.1 文件的打开或创建 6.2.2 字符编码 6.2.3 文本文件的写入 6.2.4 文件文件的读取 • 6.2.5 文件指针的移动 • 6.2.6 二进制文件的写入 • 6.2.7 二进制文件的读取 • 6.3 文件基础知识的应用

  4. 6.1 与文件有关的问题 【问题6-1】输入几名学生的通讯录,保存到文件中以备将来使用。 分析:通讯录包括姓名,性别,电话,地址,从键盘输入之后,只有存入文件中才能在关机之后仍能保存数据。 需要以写方式打开文件(新建文件),然后用write方法把数据写入文件中。

  5. 开始 打开文件 把表头写入文件 flag=='y' False True 输入数据 数据写入文件 向flag输入y或n 结束 图6-1 输入通讯录并存入文件

  6. 函数定义格式如下: def 函数名(参数): ……(函数体) #Ques6_1.py f=open('Q6_1.txt', 'w') f.write('姓 名   '+'性别 '+'电话'+' '*11+'地址'+''*18+'\n') flag='y' while flag=='y': name=input('请输入姓名:') sex=input('请输入性别:') phone=input('请输入电话:') address=input('请输入住址:') f.write(name+''*(6-len(name))) f.write(sex+''* 2) f.write(phone+''*(13-len(phone))) f.write(address+''* (20-len(address))+'\n') flag=input('是否继续输入y/n?') f.close( )

  7. 输入及程序运行结果: 请输入姓名:王小明 请输入性别:男 请输入电话:13888996322 请输入住址:云南省昆明市 是否继续输入y/n?y 请输入姓名:刘洋 请输入性别:女 请输入电话:15912180999 请输入住址:河北省石家庄 是否继续输入y/n?y 请输入姓名:赵阳 请输入性别:男 请输入电话:13199887052 请输入住址:北京市王府井6号 是否继续输入y/n?n 记事本打开文件看一下内容

  8. 开始 打开文件 读1行内容 True 到达文件尾 False 显示1行内容 结束 图6-2 读出并显示文件 【问题6-2】 把上例中存入文件的通讯录显示出来。 分析:数据一旦存入文件中,就可以在任何需要的时候把文件中的数据读出来使用。需要用读方式打开文件,然后用read( )方法读出数据。 #Ques6_2.pyf=open('Q6_1.txt', 'r') while True: line=f.readline( ) if line=='': break print(line, end='') f.close( )

  9. 6.2 文件基础知识 文件所含的字节,从文件头到文件结束,有1个默认的位置,位置从0开始。如A4SSSS3GGG 按文件中数据的组织形式把文件分为文本文件和二进制文件两类。 (1)文本文件 文本文件存储的是常规字符串,由文本行组成,通常以换行符'\n'结尾,只能读写常规字符串。文本文件可以用字处理软件如gedit、记事本进行编辑。 常规字符串是指文本编辑器能正常显示、编辑的字符串。如,英文字母串,汉字串,数字串(不是数字)。 (2)二进制文件 二进制文件把对象在内存中的内容以字节串(bytes)进行存储。不能用字处理软件进行编辑。

  10. 6.2.1 文件的打开或创建 • 文件变量名=open(文件名[, 打开方式[, 缓冲区[, encoding=字符编码]]]) (1)文件名指定了被打开的文件名称。 (2)打开模式指定了打开文件后的处理方式,见表6-1。 (3)缓冲区指定了读写文件的缓存模式。0表示不缓存, 1表示缓存,如大于1则表示缓冲区的大小。默认值是缓存模式。 (4)字符编码指定了文件中字符的编码标准。仅文本文件可指定编码。 (5)open( )函数返回1个文件对象,该对象可以对文件进行各种操作。 例如:f1 = open( 'file1.txt', 'r' ) • f2=open( 'file2.txt', 'w', encoding='UTF-8' )

  11. 文件对象建立之后,就可以使用其属性和方法。文件对象的常用属性见表6-2,文件对象的常用方法见表6-3。文件对象建立之后,就可以使用其属性和方法。文件对象的常用属性见表6-2,文件对象的常用方法见表6-3。

  12. 6.2.2 字符编码 最早的编号是美因标准信息交换码ASCII,仅对10个数字、26个大写字英文字母、26个小写字英文字母及一些其它符号进行了编码。ASCII采用8位即1个字节,因此最多只能对256个字符进行编码。随着信息技术的发展,各国的文字都需要进行编码。 常见的编码有UTF-8,GB2312,GBK,CP936。 采用不同的编码意味着把同一字符存入文件时,写入的内容可能不同。 UTF-8编码是国际通用的编码,以8位,即1字节表示英语(兼容ASCII),以24位即3字节表示中文及其它语言,UTF-8对全世界所有国家需要用到的字符进行了编码。

  13. 【例6-1】把字符串‘a1@中国’写入文件F6_1.txt中,采用UTF-8编码。显示文件的长度(总字节)。【例6-1】把字符串‘a1@中国’写入文件F6_1.txt中,采用UTF-8编码。显示文件的长度(总字节)。 程序: #Exp6_1.py f=open( 'F6_1.txt', 'w', encoding='UTF-8') f.write( 'a1@中国') length=f.seek(0, 2) #把文件指针移到文件尾,会返回文件尾的位置,其值刚好等于文件长度 f.close( ) print('文件长度=', length)  程序运行结果: 文件长度= 9

  14. 程序: • 程序: • 输入及程序运行结果: x1,y1=1, 2 x2,y2=5, 3.4 d= 4.237924020083418 6.2.3 文本文件的写入 #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) 【例6-2】 把列表中的元素写入到文件F6_2.txt中。 程序: #Exp6_2.py f=open('F6_2.txt', 'w') li=['文本文件\n', '二进制文件\n', 'seek(0)\n', 'seek(0, 2)\n'] f.writelines(li) f.close( )

  15. 程序: • 程序: • 输入及程序运行结果: x1,y1=1, 2 x2,y2=5, 3.4 d= 4.237924020083418 6.2.3 文本文件的写入 #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) 【例6-3】 在文件F6_2.txt末尾追加两行内容。 分析:要在1个已存在的文件末尾追加新内容,打开文件时需要'a+'模式,或'r+' 模式。 程序: #Exp6_3.py f=open('F6_2.txt', 'a+') s= '文本文件的读取方法\n文本文件的写入方法\n' f.write(s) f.close( ) 思考题:用'r+'模式时,需不需要把文件指针移到文件末尾?如果不移动将产生什么结果?

  16. 程序: • 程序: • 输入及程序运行结果: x1,y1=1, 2 x2,y2=5, 3.4 d= 4.237924020083418 6.2.4 文本文件的读取 #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) 有三个方法可以进行文本文件的读取,read( )、readline( )和readlines( ),下面示范read( )方法的使用。 【例6-4】 读取文件F6_1.txt的前4个字符,并显示。 程序: #Exp6_4.py f=open( 'F6_1.txt', 'r', encoding='UTF-8') s=f.read(4) #读取文件的前4个字符 f.close( ) print('s=',s) print('字符串s的长度(字符个数)=', len(s)) 程序运行结果: s= a1@中 字符串s的长度(字符个数)= 4 思考题:文件的字符数与字节数否则相同?

  17. 程序: • 程序: • 输入及程序运行结果: x1,y1=1, 2 x2,y2=5, 3.4 d= 4.237924020083418 6.2.5 文件指针的移动 #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) 为了能做到在文件的任何位置读写内容,需要用seek( )方法移动文件指针。 (1)seek(n) ,其中n>=0,seek(0)表示文件指针移到文件头;n>0时,表示移动到文件头之后的位置。从任意位置读取内容时或从任意位置覆盖内容时需要这样做。 (2)seek(0, 2)表示把文件指针移到文件尾。在追加新内容时需要这样做。 注意:不论是二进制文件还是文本文件,指针的相对位置的计算都是以字节为单位。

  18. 程序: • 程序: • 输入及程序运行结果: x1,y1=1, 2 x2,y2=5, 3.4 d= 4.237924020083418 6.2.5 文件指针的移动 #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) #Exp1_1.py import math x1, y1=eval(input('x1, y1=')) x2, y2=eval(input('x2, y2=')) d=math.sqrt((x2-x1)**2+(y2-y1)**2) print('d=', d) 【例6-8】 把文件F6_1.txt中的“国”替换为“央”,再把“1”替换为“9”,最后在文件末尾增加“人民政府”。 分析:F6_1.txt的内容: a1@中国 • 程序: #Exp6_8.py f=open('F6_1.txt', 'r+', encoding='UTF-8') f.seek(6) #文件指针移到'国'的首字节上 f.write('央') #用'央'覆盖'国' f.seek(1) #文件指针移到'1'的上 f.write('9') #用'9'覆盖'1' f.seek(0, 2) #文件批针移到文件尾 f.write('人民政府') #增加新内容 f.close( )

  19. 练习:试验、理解本次课的所有例子 第11次上机作业: 6.1 6.2 补充1:建立一个文本文件,由键盘输入3行内容,关闭文件。再次打开文件,从键盘输入一行内容,追加到文件尾。 补充2:建立一个文本文件,由键盘输入4行内容,关闭文件。再次打开文件,从键盘输入一行内容,插入到第2行之后。

More Related