内容正文:
第8章 文件和数据格式化
1
学习目标/Target
了解文件相关概念,能够说出文件标识与文件类型
掌握文件的基本操作,能够熟练完成文件的基本操作
熟悉文件迭代,能够归纳文件迭代具有哪些特点
2
学习目标/Target
了解数据的分类,能够区分一维数据、二维数据和多维数据的特点
熟悉数据的存储与读写方式,能够存储与读写一维数据和二维数据
熟悉多维数据的格式,能够归纳JSON和XML格式数据的特点
3
章节概述/ Summary
文件是一种广泛使用的数据载体,它可以存储各种类型的数据,如文本、图片、程序、音频等。通常,这些数据都存储在外部介质(如硬盘)中。为了更好地管理和规范这些数据,我们需要对其进行格式化处理,以便将其存储为可读取的文件。本章将对Python中的文件及数据格式化进行讲解。
4
目录/Contents
01
文件概述
文件的基本操作
文件迭代
02
03
实例:用户登录
04
数据维度与数据格式化
05
5
文件迭代
8.3
6
8.3 文件迭代
迭代是一个过程的多次重复,在Python中,实现了__iter__()方法的对象都是可迭代对象,比如序列、字典等。文件对象也是一个可迭代对象,这意味着可以在循环中通过文件对象自身遍历文件内容,示例如下:
file = open("demo.txt")
for line in file: # 遍历文件对象
print(line, end="")
file.close()
8.3 文件迭代
file = open("test.txt")
print("---第一次输出---")
i = 1
for line in file:
print(line, end="")
i += 1
if i == 3:
break
print("---第二次输出---")
i = 1
for line in file:
print(line, end="")
i += 1
if i == 3:
break
file.close()
假设现有文件test.txt,编写代码,在两个有先后次序关系的循环中以迭代的方式各输出两行文件内容。
实例:用户登录
8.4
9
8.4 实例:用户登录
随着互联网的迅速普及以及广泛应用,越来越多的软件需要将用户登录功能作为基本模块。然而,用户登录涉及用户的个人隐私信息,这些信息在传输时容易被黑客盗用、篡改或截获,给用户的个人隐私和安全构成威胁。
我们作为网络环境的一员,需要加强自己的信息安全意识,提高密码的复杂度和使用频率,不轻易泄漏自己的账户信息,定期更换和更新密码,从而保障自己在网络上的信息安全。
8.4 实例:用户登录
本实例要求编写程序,实现用户登录的功能,此处的用户登录分为管理员登录和普通用户登录两种情况。
8.4 实例:用户登录
根据以上功能分析,用户管理模块应包含以下文件:
标识位文件flag。该文件用于检测是否为初次使用系统,它里面的初始数据为0,在首次启动软件后系统会将数据修改为1。
管理员账户文件u_root。该文件用于保存管理员的账户信息,该账户在程序中设置。
普通用户账户文件。用于保存普通用户注册的账户,每个用户对应一个账户文件,普通用户账户文件统一存储于普通用户文件夹users中。
8.4 实例:用户登录
结合以上描述的功能设计程序,用户登录模块应包含的函数及其功能分别如下:
main():程序的入口。
c_flag():标识位文件更改。
init():信息初始化。
print_login_menu():输出登录菜单。
user_select():用户类型选择。
root_login():管理员登录。
user_register():用户注册。
user_login():普通用户登录。
数据维度与数据格式化
8.5
14
8.5.1 基于维度的数据分类
1. 一维数据
一维数据是具有对等关系的一组线性数据,对应数学之中的集合和一维数组,在Python中,一维列表、一维元组和集合都属于一维数据。一维数据中的各个元素可通过逗号、空格等符号分隔。例如,我国2023年公布的新一线城市便是一组一维数据,通过逗号分隔此组数据,具体如下所示:
成都,重庆,杭州,西安,武汉,苏州,郑州,南京,天津,长沙,东莞,宁波,佛山,合肥,青岛
8.5.1 基于维度的数据分类
二维数据关联参数的数量为2,此种数据对应数学之中的矩阵和二维数组,在Python中,嵌套列表、嵌套元组等都属于二维数据。表格是日常生活中最常见的二维数据的组织形式,二维数据也称为表格数据。高三一班期中考试的成绩表就是一种表格数据, 如下图所示。
2. 二维数据
8.5.1 基于维度的数据分类
多维数据是指具有多个维度或特征的数据,它相比前两种数据而言具有更多的特征。
Python中的字典属于多维数据。多维数据在网络中十分常见,计算机中常见的多维数据形式有HTML、JSON等。
“高三一班考试成绩”:[ {“姓名”: “小红”, "语文": "124",
"数学": "137", "英语": "145", "理综": "260" }; {"姓名": "小明", "语文": "116", "数学": "143",
“英语”: “139”, “理综”: "263" }; ……
]
3. 多维数据
8.5.2 不同维度数据的存储与读写
数据通常存储在文件之中,为了方便后续的读写操作,数据通常需要按照约定的组织方式进行存储。一维数据呈线性排列,一般用特殊字符分隔,具体示例如下:
使用空格分隔:成都 杭州 重庆 武汉 苏州 西安 天津
使用逗号分隔:成都,杭州,重庆,武汉,苏州,西安,天津
使用&分隔:成都&杭州&重庆&武汉&苏州&西安&天津
1. 数据存储
8.5.2 不同维度数据的存储与读写
存储一维数据时可使用不同的特殊字符分隔数据元素,但有几点需要注意:
同一文件或同组文件一般使用同一分隔符分隔。
分隔数据的分隔符不应再作为数据出现。
分隔符为英文半角符号,一般不使用中文符号作为分隔符。
1. 数据存储
8.5.2 不同维度数据的存储与读写
二维数据可视为多条一维数据的集合,当二维数据只有一个元素时,这个二维数据就是一维数据。国际上通用的一维数据和二维数据的存储格式为CSV(Commae-Separeted Values,逗号分隔值)。CSV文件以纯文本形式存储表格数据,文件的每一行对应表格中的一条数据记录,每条记录由一个或多个字段组成,字段之间使用英文半角的逗号分隔。
姓名,语文,数学,英语,理综
小红,124,137,145,260
小明,116,143,139,263
小白,120,130,148,255
小兰,115,145,131,240
小刚,123,108,121,235
小华,132,100,112,210
1. 数据存储
8.5.2 不同维度数据的存储与读写
在Windows平台中, CSV文件的后缀名为.csv,此种文件可通过Excel或记事本打开。将以上示例中CSV格式的数据存储到当前目录下的score.csv文件中,通过Python程序读取该文件中的数据并以列表形式输出,具体代码如下:
csv_file = open('score.csv')
lines = []
for line in csv_file:
line = line.replace('
','')
lines.append(line.split(','))
print(lines)
csv_file.close()
2. 数据读取
8.5.2 不同维度数据的存储与读写
将一维数据和二维数据写入文件中,即按照数据的组织形式,在文件中添加新的数据。
接下来,在保存学生成绩的文件score.csv中写入每名学生的总分,效果如图所示。
3. 数据写入
多学一招:RFC 4180 CSV格式标准
RFC 4180提出了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)类型对于CSV格式的标准,此标准可满足大多数应用对CSV文件的要求,具体格式规范如下:
1
2
每一行记录为单独一行,用回车换行符(\r
)分隔。
文件中最后一行记录可以有回车换行符,也可以没有。
多学一招:RFC 4180 CSV格式标准
RFC 4180提出了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)类型对于CSV格式的标准,此标准可满足大多数应用对CSV文件的要求,具体格式规范如下:
3
第一行为可选的标题,此行格式与普通记录格式相同。标题要包含文件记录字段对应的名称,且与记录字段一一对应。
4
包括标题在内的每行记录都存在一个或多个由半角逗号分隔的字段,整个文件中每行包含相同数量的字段;空格也是字段的一部分,不应被忽略;每一行记录最后一个字段后不需要逗号。
多学一招:RFC 4180 CSV格式标准
RFC 4180提出了MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)类型对于CSV格式的标准,此标准可满足大多数应用对CSV文件的要求,具体格式规范如下:
5
每个字段可用(也可以不用)英文半角双引号(“”)包裹,如果字段没有使用双引号,那么该字段内部不能出现双引号字符。
字段中若包含回车换行符、双引号或逗号,该字段需要用双引号包裹。
6
8.5.3 多维数据的格式化
二维数据是一维数据的集合,以此类推,三维数据可以是二维数据的集合,但按照此种层层嵌套的方式组织数据,多维数据的表示会非常复杂。为了直观地表示多维数据,也为了便于组织和操作,三维及以上的多维数据统一采用键值对的形式进行格式化。
8.5.3 多维数据的格式化
网络平台上传递的数据大多是高维数据,JSON是网络中常见的高维数据格式,它是一种轻量级的数据交换格式,其本质是一种格式化后的字符串,既易于人类阅读和编写,也易于机器解析和生成。JSON语法是JavaScript语法的子集,JavaScript语言中一切都是对象,因此JSON也以对象的形式表示数据。
8.5.3 多维数据的格式化
JSON格式的数据遵循以下语法规则:
数据存储在键值对key:value中,例如“姓名”: “小明”。
数据的字段由逗号分隔,例如“姓名”: “小明”, “语文”: “116”。
一个大括号保存一个JSON对象,例如{“姓名”: “小明”, “语文”: “116”}。
一个中括号保存一个数组,例如[{“姓名”: “小明”, “语文”: “116”}]。
8.5.3 多维数据的格式化
“高三一班考试成绩":[
{“姓名”: “小红",
“语文": “124",
“数学": “137",
“英语": “145",
“理综": “260"};
{“姓名”: “小明",
“语文": “116",
“数学": “143",
“英语": “139",
“理综": “263"};
……
]
假设目前有高三一班考试成绩的JSON数据,具体如下所示。
8.5.3 多维数据的格式化
除JSON外,网络平台也会使用XML、HTML等格式组织多维数据,XML和HTML格式通过标签组织数据,例如将图书列表以XML格式存储,则具体格式如下:
<高三一班考试成绩>
<姓名>小红</书名><语文>124</语文><数学>137</数学><英语>145</英语><理综>260</理综>
<姓名>小红</书名><语文>124</语文><数学>137</数学><英语>145</英语><理综>260</理综>
……
</高三一班考试成绩>
本章小结
本章主要讲解了与文件和数据格式化相关的知识,包括计算机中文件的定义、文件的基本操作、文件迭代、文件操作模块os以及数据维度和高维数据格式化等。通过本章的学习,读者能够了解计算机中文件的意义,熟练读取、更改文件,熟悉文件操作模块,并掌握常见的数据组织形式。
本
章
小
结
31
$$