当前位置:
文档之家› Python语言程序设计 第6章 文件与字典
Python语言程序设计 第6章 文件与字典
定义全局变量
drawLine()绘制线段 drawText()输出文字
drawRectangel()绘制矩形 drawBar()绘制多个柱体
drawGraph()绘制统计图
程序运行结果
字典实例二
黄天羽 北京理工大学
同 前 , 有 电 话 簿 TeleAddressBook 和 邮 箱 地 址 簿 EmailAddressBook两个文件,使用字典结构将其合并 为一个完整的AddressBook文件
rb 只读二进制文件。如果文件不存在,则输出 错误
wb 只写二进制文件,如果文件不存在,则自动 创建文件。
ab 附加到二进制文件末尾 r+ 读写
举例
打开一个名为“numbers . dat”的文本文件 >>> infile = open (“numbers.dat”, “r”)
打开一个名为“music.mp3”的音频文件 >>>infile = open (“music.mp3”, “rb”)
文件的基础
黄天羽 北京理工大学
文件
存储在外部介质上的数据或信息的集合 。
程序中的源程序 数据中保存着数据 图像中的像素数据 …
有序的数据序列。
编码
信息从一种形式转换为另一种形式的过程 ASCII码 Unicode UTF-8 …
常用的编码
常用的编码
Unicode
跨语言、跨平台进行文本转换和处理 对每种语言中字符设定统一且唯一的二进制编码 每个字符两个字节长 65536 个字符的编码空间 “严”:Unicode的十六进制数为4E25
字典的概念
映射: 通过任意键值查找集合中值信息的过程 python中通过字典实现映射 字典是键值对的集合
该集合以键为索引 同一个键信息对应一个值
简单的字典的实例
>>>passwd = {"China":"BigCountry", "Korean":"SmallCountry", "France":"MediumCountry"} >>>print passwd {'Korean': 'SmallCountry', 'China': 'BigCountry', 'France': 'MediumCountry'}
keys():tuple values():tuple Items():tuple clear():None get(key):value pop(key):val update(字典)
返回一个包含字典所有Key的列表 返回一个包含字典所有value的列表 返回一一个包含所有键值的列表 删除字典中的所有项目 返回字典中key对应的值 删除并返回字典中key对应的值 将字典中的键值添加到字典中
读取 写入 定位 其他:追加、计算等
关闭文件
切断文件与程序的联系 写入磁盘,并释放文件缓冲区
打开文件
Open() <variable> = open (<name>, <mode>)
<name>磁盘文件名 <mode>打开模式
打开模式
r 只读。如果文件不存在,则输出错误 w 为只写(如果文件不存在,则自动创建文件) a 表示附加到文件末尾
字典类型与序列类型的区别
存取和访问方式不同 键的类型不同
序列类型只能用数字类型的键 字典类型可以用其他对象类型作键
排列方式不同
序列类型保持了元素的相对关系 而字典中的数据是无序排列的。
映射方式不同
序列类型通过地址映射到值 字典类型通过键直接映射到值
字典的操作
黄天羽 北京理工大学
常用的编码
UTF-8编码
可变长度的Unicode的实现方式 “严”:十六进制数为E4B8A5
Unicode与UTF8编码字节范围 对应关系
Unicode符号范围 | UTF-8编码方式
(十六进制)
| (二进制)
------------------------+-----------------------------------
遍历字典的key-value for item,value in adict.items(): print(item, value)
是否一个键在字典中
in 或者 not in 举例
字典的标准操作符
-,<,>,<=,>=,==,!=,and, or, not 字典相等测试
Python还提供了丰富的字典方法,其中 :
多文件读写例子
打开文件、读取文件:
多文件读写例子
建立空列表用于存储姓名、电话、Emial:
多文件读写例子
获取TeleAddressBook中的信息:
获取EmailAddressBook中的信息:
多文件读写例子
开始合并处理
生成新的数据:
按索引方式遍历姓名列表1 处理姓名列表2中剩余的姓名
们写入文件。
举例:写入操作
文件遍历
最常见的文件处理方法 举例
拷贝文件 根据数据文件定义行走路径 将文件由一种编码转换为另外一种编码
遍历文件模板
通用代码框架:
file = open (someFile, "r") For line in file.readlines():
#处理一行文件内容 file.close()
合并后的新地址簿为:
打开文件并读取文件 将文件的多行数据存储至lines1、lines2变量中
建立空字典dic1, dic2存储姓名、电话和邮箱:
获取TeleAddressBook中信息: 获取EmailAddressBook中信息:
文本合并处理
生成新的数据表头 按字典键的操作遍历姓名列表1
按索引方式遍历姓名列表1:
处理姓名列表2中剩余的姓名:
将新生成的合并数据写入新的文件中: 关闭文件
字典的基础
黄天羽 北京理工大学
字典是针对非序列集合而提供的一种数据类型
举例:检索学生信息。
“<键><值>对”。 键(即身份证号码) 值(即学生信息)。
“键值对”例子
姓名和电话号码 用户名和密码 国家名称和首都等。
简化代码框架: file = open (someFile, "r") For line in file: #处理一行文件内容 file.close()
举例:文件拷贝
文件实例一
黄天羽 北京理工大学
编写程序根据文件data.txt中的数据, 使用turtle库 来动态绘制图形路径。
前进300个像素 0:向左转 1:向右转 转动多少角度 颜色:r,g,b
(4) 根据每一条数据记录进行绘制。 (5) 画笔回到原点
文件实例二
黄天羽 北京理工大学
多文件读写例子
编写程序将电话簿TeleAddressBook.txt和电子邮 件 EmailAddressBook.txt 合 并 为 一 个 完 整 的 AddressBook.txt
多文件读写例子
合并后的新地址簿为:
处理与表2重名的信息 处理其他信息
处理列表2中剩余的姓名
按字典键的操作遍历姓名:
处理列表2中剩余的姓名。 将新生成的合并数据写入新文件。 关闭文件。
更加节省空间 采用二进制无格式存储 表示更为精确
注意:
文本文件是基于字符定长的ASCII; 二进制文件编码是变长的,灵活利用率要高; 不同的二进制文件解码方式是不同的。
文件的基本处理的对象相关联 通过相关的文件对象获得
文件操作
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
为字典增加一项
dictionaryName[key] = value 举例:
访问字典中的值
dictionaryName[key] 返回键key对应的值value 举例:
删除字典中的一项
del dictionaryName[key]
举例:
字典的遍历
for key in students: print (key + “:”+ str(stuendents[key]))
程序预期的运行结果如图所示
该问题的IPO模式可以描述为: 输入:数据文件 处理:读取数据文件,并根据数据内容和
要求绘制路径。 输出:构建窗口,并输出图形
程序实现的具体过程为: (1)使用import命令为程序引入turtle库 (2)设置窗口信息和Turtle画笔:
(3) 读取数据文件到列表result中。
文件读取
read() 返回值为包含整个文件内容的一个字符串 readline() 返回值为文件下一行内容的字符串。 readlines() 返回值为整个文件内容的列表,每项
是以换行符为结尾的一行字符串。
示例:将文件内容输出到屏幕上
举例:输出文件前5行内容
写入文件
从计算机内存向文件写入数据 write():把含有本文数据或二进制数据块的字符串写入文件中。 writelines():针对列表操作,接受一个字符串列表作为参数,将它
字典的方法
字典实例一
黄天羽 北京理工大学