7.1文件的使用
文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象。文件包括文本文件和二进制文件两种类型。
7.1.1文件的类型
文本文件一般由单一特定编码的字符组成,如UTF-8编码,内容容易统一展示和阅读。大部分文本文件都可以通过文本编辑软件或文字处理软件创建、修改和阅读。由于文本文件
存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,如一个txt 格式的文本文件
二进制文件直接由比特О和比特1组成,没有统一的字符编码,文件内部数据的组织格
式与文件用途有关。二进制是信息按照非字符但有特定格式形式的文件,如png格式的图片文件、avi格式的视频文件。二进制文件和文本文件最主要的区别在于是否有统一的这符编码。二进制文件没有统一的字符编码,只能当作字节流,而不能看作是字符串
无论文件创建为文本文件或者是二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。
一个文本文件 a.txt,其内容为“全国计算机等级考试”,采用文本方式打开。这里需要将文本文件与Python程序文件放在同一个目录中。
采用文本方式读入文件,文件经过编码形成字符串,打印出有含义的字符;采用二进制方式打开文件,文件被解析为字节流。由于存在编码,字符串中的一个字符由多个字节表示。
7.1.2文件的打开和关闭
Python对文本文件和二进制文件采用统一的操作步骤,即“打开—操作—关闭”,操作系统中的文件默认处于存储状态,首先需要将其打开,使用得当前程序有权操作这个文件,打开不存在的文件系统可以创建这个文件。打开后的文件处于占用状态,此时,另一个进程不能操作这个文件。可以通过一组方法读取文件的内容或向文件写入内容,操作之后需要将文件关闭,关闭将释放对文件的控制使用文件恢复成存储状态,此时,另一进程能够操作这个文件。
Python通过open()函数打开一个文件,并返回一个操作这个文件的变量。语法结构:
变量名=open(文件路径及文件名,打开模式)
open()函数有两个参数:文件名和打开模式。文件名可以是文件的实际名字,也可以是包含完整路径的名字。打开模式用于控制使用何种方式打开文件,open()函数提供了7种基本的打开模式。
文件的打开模式
r 只读模式,如果文件不存在,返回异常FileNotFoundError,默认值
w 覆盖写模式,文件不存在则创建,存在则完全覆盖原文件
x 创建写模式,文件不存在则创建,存在则返回异常FileExistsError
a 追加写模式,文件不存在则创建,存在则在原文件最后追加内容
b 二进制文件模式
t 文本文件模式,默认值
- 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
打开模式使用字符串方式表示,根据字符串定义,单引号或者双引号均可。上述打开模式中,r,w,x,a或以和 b,t,+组合使用,形成既表达读写又表达文件模式的方式。
7.1.3文件的读写
根据打开方式不同,文件读写也会根据文本文件或二进制打开方式有所不同。
f.read(size=-1):从文件中读入整个文件内容。参数可选,如果给出,读入前size长度的字符串或字节流。
f.readline(size=-1):从文件中读入一行内容。参数可选,如果给出,读入该行前size长度的字符串或字节流。
f.readlines(hint=-1):从文件中读入所有行,以每行为元素形成一个列表。参数可选,如果给出,读入hint行。
f.seek(offset):改变当前文件操作指针的位置,offset的值:o为文件开头;2为文件结尾。
如果文件以文本文件方式打开,则读入字符串;如果文件以二进制方式打开,则读入字节流。
如果文件不大,可以一次性将文件内容读入,保存到程序内部变量中。f.read()是最常用的一次性读入文件的函数.其结果是一个字符串。
f.write(s):向文件写入一个字符串或字节流
f.writelines(lines):将一个元素为字符串的列表整体写入文件
f.write(s)向文件写入字符串 s,每次写入后,将会记录一个写入指针。该方法可以反复调用,在写入指针后分批写入内容,直至文件被关闭。
使用f.write(s)时,要显示地使用”\n”对写入文本进行分行,如果不进行分行,每次写入的字符串会被连接起来。
f.writelines(lines)直接将列表类型的各元素连接起来写入文件f。
7.2数据组织的维度
一组数据在被计算机处理前需要进行一定的组织,表明数据之间的基本关系和逻辑,进而形成“数据的维度”。根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据。
7.2.1一维数据
一维数据由对等关系的有序或无序数据构成,采用线性方式组织,对应于数学中数组的概念。例如,中国的直辖市列表即可表示为一维数据,一维数据具有线性特点。
维数据十分常见,任何表现为序列或集合的内容都可以看作是一维数据。
7.2.2二维数据
二维数据,也称表格数据,由关联关系数据构成,采用二维表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。
例如,国家统计局发布的居民消费价格数是二维数据。表格横向包括“指标”“2014年”“2015年”“2016年”,分别表示项目和时间维度,表格纵向为具体指标点,形成了二维数据关系。其中,第一行为说明部分,可以看作是与其他行一致的二维数据一行,也可以看作具数据外的数明部分
7.2.3高维数据
高维数据由键值对类型的数据构成,采用对象方式组织,可以我层嵌套。
高维数据在Web系统中十分常用,作另当今Internet组织内容的主要方式,高维数据衍生出HTML、XML、JSON等具体数据组织的语法结构。
以JSON格式为例,下面给出了描述“本书”的高维数据表示形式,其中冒号(:)形成一个键值对,逗号(,)分隔键值对,JSON格式中[]组织各键值对成为一个整体,与“本书”形成高层次的键值对。高维数据相比一维数据和二维数据能表达更加灵活和复杂的数据产系。
7.3.1一维数据的表示
一维数据是最简单的数据组织类型,幽于是线性结构,在Python 语言中主要采用列表形式表示。例如,中国的直辖市数据可以采用一个列表变量表示。
采用列表类型表示一维数据的时候需要注意每个数据的数据类型。7.3.2一维数据的存储
一维数据的文件存储有多种方式,总体思路是采用特殊字符分隔各数据。采用存储方法包括如下4种。
(1)采用空格分隔元素,列如:
(2)采用逗号分隔元素,例如:
(3)使用换行分隔元素,例如:
(4) 其他特殊符号分割
这4种方法中,逗号分隔的存储格式叫作csv格式(Comma-Separated Values,即逗号分隔值),它是一种通用的、相对简单的文件格式,在商业和科学上广泛应用,大部分编辑器都支持直接读入或保存文件为CSv格式,如 Windows平台上的记事本或微软Office Excel等。存储的文件一般采用.csv为扩展名。
一维数据保存成CSV格式后,各元素采用逗号分隔,形成一行,这里的逗号是英文逗号。从Python表示到数据存储,需要将列表对象输出为CSV格式以及CSV格式读入成列表对象。
列表对象输出为CSV格式文件方法如下,采用字符串的join()方法最为方便。
1 | list=[] |
7.3.3一维数据的处理
对一维数据进行处理首先需要从CSV格式文件读入一维数据,并将其表示为列表对象。需要注意,从CSV文件中获得内容时,最后一个元素后面包含了一个换行符(“‘n”)。对于数据的表达和使用来说,这个换行是多余的,需要采用字符串的strip()方法去掉数据尾部的换行符,进一步使用split()方法以逗号进行分隔。
1 | f=open() |
7.4二维数据的处理
7.4.1二维数据的表示
二维数据由多个一维数据构成,可以看作是一维数据的组合形式。因此,二维数据可以采用二维列表来表示,即列表的每个元素对应二维数据的一行,这个元素本身也是列表类型,其内部各元素对应这行中的各列值。
提示:二维数据的数据类型
二维数据一般采用相同的数据类型存储数据,便于操作。
尽管在二维数据中存在大量数值,但由于本例中数值所在行或列不都是数字,存在字符文本,因此,将数值统一表示为字符串形式。
7.4.2二维数据的存储
二维数据由一维数据组成,用CSV格式文件存储。CSV文件的每一行是一维数据,整个CSV文件是一个二维数据。存储以下数据为.csv文件,名称为cpi.csv。
二维数据存储为CSV格式,需要将二维列表对象写入CSV格式文件以及将CSV格式读成二维列表对象。
二维列表对象输出为CSV格式文件方法如下。
1 | list= |
7.4.3二维数据的处理
对二维数据进行处理首先需要从CSV格式文件读入二维数据,并将其表示为二维列表对象。读取CSV格式文件方法如下:
1 | f=o |
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~