第 7 章 文件和数据格式化

整理的文章内容主要来源为高教版《计算机等级考试二级 Python》教程视频讲义,并且更正了原讲义中的错误的地方。
专栏文章索引如下:
考试大纲
第 1 章 程序设计基本方法
第 2 章 Python 语言基本语法元素
第 3 章 基本数据类型
第 4 章 程序的控制结构
第 5 章 函数和代码复用
第 6 章 组合数据类型
第 7 章 文件和数据格式化
第 8 章 Python 计算生态
第 9 章 Python 标准库概览
第 10 章 Python 第三方库使用
第 11 章 Python 第三方库纵览

1. 文件的使用

文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容。概念上,文件是数据的集合和抽象。文件包括文本文件和二进制文件两种类型。

1.1 文件的类型

文本文件一般由单一特定编码的字符组成,如 UTF-8 编码,内容容易统一展示和阅读。大部分文本文件都可以通过文本编辑软件或文字处理软件创建、修改和阅读。由于文本文件存在编码,所以,它也可以被看作是存储在磁盘上的长字符串,如一个txt格式的文件。

二进制文件直接由比特 0 和比特 1 组成,没有统一的字符编码,文件内部数据的组织格式与文件用途有关。二进制是信息按照非字符但有特定格式形式的文件,如 png 格式的图片文件、avi 格式的视频文件。二进制文件和文本文件最主要的区别在于是否有统一的字符编码。二进制文件没有统一的字符编码,只能当作字节流,而不能看作是字符串。

无论文件创建为文本文件或者是二进制文件,都可以用“文本文件方式”和“二进制文件方式”打开,但打开后的操作不同。

一个文本文件 a.txt, 其内容为“全国计算机等级考试”,采用文本方式打开。这里需要将文本文件与 Python 程序文件放在同一个目录下。

file = open('a.txt', 'r', encoding='utf-8')
print(file.readline())
file.close()

在这里插入图片描述
在这里插入图片描述
文本文件 a.txt 采用二进制方式打开。

file = open('a.txt','rb')
print(file.readline())
file.close()

在这里插入图片描述

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, + 组合使用,形成既表达读写又表达文件模式的方式。
打开文件有一些常用命令,使用方法如下:
  1. 以文本方式只读打开一个文件,读入后不能对文件进行修改。
变量名 = open(文件名, ’r’)
变量名 = open(文件名)
  1. 以文本方式可读地打开一个文件,可以读入并修改文件。
变量名 = open(文件名, ’r+)
  1. 以文本方式打开一个空文件,准备写入一批内容,更新原文件。
变量名 = open(文件名, ’w+)
  1. 以文本方式打开一个空文件或已有文件,追加形式写入一批内容,更新原文件。
变量名 = open(文件名, ‘a+)
  1. 以二进制方式只读打开一个文件,读入后不能对文件进行修改。
变量名 = open(文件名, ‘rb’)
  1. 文件使用结束后要用 close() 方法关闭,释放文件的使用授权。
变量名.close()

新建一个文本文件a.txt, 其内容为“全国计算机等级考试”,保存到桌面位置 python 文件夹中,打开并关闭文件的操作过程。
注意事项:
由于 “\” 是字符中的转义字符,所以表示路径时,使用 “\” 或 “/” 代替 “\”.

1.3 文件的读写

根据打开方式不同,文件读写也会根据文本文件或二进制文件打开方式有所不同。
文件读写方法及含义如下所示:

方法含义
f.read(size=-1)从文件中读入整个文件内容。参数可选,如果给出,读入前 size 长度的字符串或字节流
f.readline(size=-1)从文件中读入一行内容。参数可选,如果给出,读入该行前 size 长度的字符串或字节流
f.readlines(size=-1)从文件中读入所有行,以每行为元素形成一个列表。参数可选,如果给出,读入 hint 行
f.seek(offset)改变当前文件操作指针的位置,offset 的值:0 为文件开头;2 为文件结尾
如果文件以文本方式打开,则读入字符串;如果文件以二进制方式打开,则读入字节流。
如下是一个文件的内容,保存为 bar.txt, 存储路径是桌面位置的 Python 文件夹下,对 bar.txt 文件的读入实例如下。
新年都有未芳华,二月初惊见草芽。
白雪却嫌春色晚,故穿庭树作飞花。

如果文件不大,可以一次性将文件内容读入,保存到程序内部变量中。f.read() 是最常用的一次性读入文件的函数,其结果是一个字符串。

f = open('bar.txt', 'r', encoding='utf-8')
s = f.read()
print(s)
f.close()

在这里插入图片描述
f.readlines() 也是一次性读入文件的函数,其结果是一个列表,每个元素是文件的一行。

f = open('bar.txt', 'r', encoding='utf-8')
s = f.readlines()
print(s)
f.close()

在这里插入图片描述
文件打开后,对文件的读写有一个读取指针,当文件读入内容后,读取指针将向前进,再次读取的内容将从指针的新位置开始。

f = open('bar.txt', 'r', encoding='utf-8')
print(f.read())
print('---------------------')
s = f.readlines()
print(s)
f.close()

在这里插入图片描述
结合读取指针理解,上述代码中 s 返回服务为空,因为之前 f.read() 方法已经读取了文件全部内容,读取指针在文件末尾,再次调用 f.readlines() 方法无法从当前读取指针处读入内容,因此返回结果为空。
f.seek() 方法能够移动读取指针的位置,f.seek(0) 将读取指针移动到文件开头,f.seek(2) 将读取指针移动到文件末尾。

f = open('bar.txt', 'r', encoding='utf-8')
print(f.read())
print('---------------------')
f.seek(0)
s = f.readlines()
print(s)
f.close()

在这里插入图片描述
从文本文件中逐行读入内容并进行处理是一个基本的文件操作需求。文本文件可以看作是由行组成的组合类型。因此,可以使用遍历循环逐行遍历文件内容。
语法格式:

f = open(文件路径及名称, ‘r’)
for line in f:
	print(line)
f.close()
f = open('bar.txt', 'r', encoding='utf-8')
for line in f:
	print(line)
f.close()

在这里插入图片描述
两行文字输出之间有个空行,这是因为原文第一行之后有个换行符 ”\n”.
文件写入方法及含义如下所示:

方法含义
f.write(s)向文件写入一个字符串或字节流
f.writelines(lines)将一个元素为字符串的列表整体写入文件
f.write(s) 向文件写入字符串 s, 每次写入后,将会记录一个写入指针。该方法可以反复调用,在写入指针后分批写入内容,直至文件被关闭。
在这里插入图片描述
使用 f.write(s) 时,要显示地使用 ’\n’ 对写入文本进行分行,如果不进行分行,每次写入的字符串都会被连起来。
f.writelines(lines) 直接将列表类型的各元素连接起来写入文件 f.
f = open('bar.txt', 'w', encoding='utf-8')
lst = ['新年都未有芳华,二月初惊见草芽']
f.writelines(lst)
f.close()

2. 数据组织的维度

一组数据在被计算机处理前需要进行一定的组织,表明数据之间的基本关系和逻辑,进而形成“数据的维度”。根据数据的关系不同,数据组织可以分为:一维数据、二维数据和高维数据。

2.1 一维数据

一维数据由对等关系的有序或无序数据构成,采用线性方式组织,对应于数学中数组的概念。例如,中国的直辖市列表即可表示为一维数据,一维数据具有线性特点。

北京、上海、天津、重庆

一维数据十分常见,任何表现为序列或集合的内容都可以看作是一维数据。

2.2 二维数据

二维数据,也称表格数据,由关联关系数据构成,采用二维表格方式组织,对应于数学中的矩阵,常见的表格都属于二维数据。

例如,国家统计局发布的居民消费价格数是二维数据。表格横向包括“指标”“2014年”“2015年”“2016年”,分别表示项目和时间维度,表格纵向为具体指标点,形成了二维数据关系。其中,第一行为说明部分,可以看作是与其他行一致的二维数据一行,也可以看作是数据外的说明部分。
在这里插入图片描述
每个数据为相比上年数据的标准值,即上年指标为100.
提示:二维数据首行。
一般首行算作二维数据的一部分。

2.3 高维数据

高维数据由键值对类型的数据构成,采用对象方式组织,可以多层嵌套。
高维数据在 Web 系统中十分常用,作为当今 Internet 组织内部的主要方式,高维数据衍生出HTML、XML、JSON等具体数据组织的语法结构。
以 JSON 格式为例,下面给出了描述“本书”的高维数据表示形式,其中冒号 ‘:’ 形成一个键值对,逗号 (,) 分割键值对,JSON 格式中 [] 组织各键值对成为一个整体,与“本书”形成高层次的键值对。高维数据相比一维数据和二维数据能表达更加灵活和复杂的数据体系。

3. 一维数据的处理

3.1 一维数据的表示

一维数据是最简单的数据组织类型,由于是线性结构,在 Python 语言中主要采用列表形式表示。例如,中国的直辖市数据可以采用一个列表变量表示。

lst = ['北京','上海','天津','重庆']
print(lst)

采用列表类型表示一维数据的时候需要注意每个数据的数据类型。

3.2 一维数据的存储

一维数据的文件存储有多种方式,总体思路是采用特殊字符分隔各数据。采用存储方法包括如下 4 种。

  1. 采用空格分隔元素,例如:
北京 上海 天津 重庆
  1. 采用逗号分隔元素,例如:
北京, 上海, 天津, 重庆
  1. 使用换行分隔元素,例如:
北京
上海
天津
重庆
  1. 其他特殊符号分隔,以分号分隔为例,例如:
北京:上海;天津:重庆

这 4 种方法中,逗号分隔的存储格式叫作 CSV 模式 (Comma-Separated Values, 即逗号分隔值),它是一种通用的、相对简单的文件格式,在商业和科学上广泛应用,大部分编辑器都支持直接读入或保存文件为CSV格式,如 windows 平台上的记事本或微软 Office Excel 等,存储的文件一般采用 .csv 为扩展名。
一维数据保存 CSV 格式后,各元素采用逗号分隔,形成一行,这里的逗号是英文逗号。从 Python 表示到数据存储,需要将列表对象输出为 CSV 格式以及 CSV 格式读入到列表对象。
列表对象输出为 CSV 格式文件方法如下,采用字符串 join() 方法最为方便。
在这里插入图片描述

3.3 一维数据的处理

对一维数据进行处理首先需要从 CSV 格式文件读入一维数据,并将其表示为列表对象。
需要注意,从 CSV 文件中获得内容时,最后一个元素包含一个换行符(“\n”). 对于数据的表达和使用来说,这个换行是多余的,需要采用字符串的 strip() 方法去掉数据尾部的换行符,进一步使用以逗号进行分隔。

f = open('city.csv', 'r')
lst = f.read().strip('\n').split(',')
f.close()
print(lst)

在这里插入图片描述

4. 二维数据的处理

4.1 二维数据的表示

二维数据由多个一维数据构成,可以看作是一维数据的组合形式。因此,二维数据可以采用二维列表来表示,即列表的每个元素对应二维数据的一行,这个元素本身也是列表类型,其内部各元素对应这行中的各列值。

lst = [[‘指标’,2014年’,2015年’,2016年’],
[‘居民消费价格指数’,102,101.4,102],
[‘食品’,103.1,102.3,104.6]]

注意:二维数据的数据类型
二维数据一般采用相同的数据类型存储数据,便于操作。
尽管在二维数据中存在大量元素数值,但由于本例中数值所在行或列不都是数字,存在字符文本,因此,将数值统一表示为字符串形式。

4.2 二维数据的存储

二维数据由一维数据组成,用 CSV 格式文件存储。CSV 文件的每一行是一维数据,整个 CSV 文件是一个二维数据,存储以下数据为 .csv 文件,名称为 cpi.csv.
二维数据存储为 CSV 格式,需要将二维列表对象写入 CSV 格式以及将 CSV 格式读成二维列表对象。
二维列表对象输出为 CSV 格式文件方法如下。
在这里插入图片描述

4.3 二维数据的处理

对二维数据进行处理首先需要从 CSV 格式文件读入二维数据,并将其表示为二维列表对象。读取 CSV 格式文件方法如下:

f = open('city.csv', 'r')
lst = []
for line in f:
	lst.append(line.strip('\n').split(','))
f.close()
print(lst)

在这里插入图片描述
二维数据处理等同于二维列表的操作。与一维列表不同,二维列表一般需要借助循环遍历实现对每个数据的处理。
语法结构:

for now in lst:
	for item in row:
		对第 row 行第 item 列元素进行处理
f = open('city.csv', 'r')
lst = []
for line in f:
	lst.append(line.strip('\n').split(','))
f.close()
for row in lst:
	line = ''
	for item in row:
		line = '{:10}\t'.format(item)
	print(lst)

在这里插入图片描述

5. 选择题

(1)关于 Python 变量使用,下列说法中错误的是(B)

  • A. 变量使用不必事先声明
  • B. 变量使用无须先创建和赋值,可以直接使用
  • C. 变量使用无须指定数据类型
  • D. 可以使用del释放变量的内存资源

(2)关于文件,下列说法中错误的是(A)

  • A. 对已经关闭的文件进行读写操作会默认再次打开文件
  • B. 对文件操作完成后即使不关闭程序也不会出错,所以可以不关闭文件
  • C. 对于非空文本文件,read() 返回字符串,readlines() 返回列表
  • D. file=open(filename,’rb’) 表示以只读、二进制方式打开名为 filename的文件

(3)以下代码的运行结果是(C)

fname = input(‘请读入要写入的文件’)
fo = open(fname,’w+)
ls = [‘唐诗’,’宋词’,’元曲’]
fo.write(ls)
fo.seek()
for line in fo:
	print(line)
f.close()
  • A. 唐诗
    宋词
    元曲

  • B. ‘唐诗’
    ‘宋词’
    ‘元曲’

  • C. 唐诗宋词元曲

  • D.‘唐诗宋词元曲’

(4)下列选项中不是 Python 对文件读操作方法的是(C)

  • A. read()
  • B. readline()
  • C. readall()
  • D. readlines()

(5)将一个文件与程序中的对象关联起来的过程,称为(C)

  • A. 文件读取
  • B. 文件写入
  • C. 文件打开
  • D. 文件关闭

(6)在读写文件之前,需要创建文件对象,采用的方法是(C)

  • A. create
  • B. folder
  • C. open
  • D. file

(7)有一非空文本文件 textfile.txt,执行下述代码,程序的输出结果是(C)

file = open(‘textfile.txt’,’r’)
for line in file.readlines():
		line +=[prefix]file.close()
for line in file.readlines():
	print(line)
  • A. 逐行输出文件内容
  • B. 逐行输出文件内容,但每行以[prefix]开头
  • C. 报错
  • D. 文件被清空,所以没有输出

(8)关于 csv 文件处理,下述描述中错误的是(C)

  • A. 因为 csv 文件以半角逗号分隔每列数据,所以即使使用列数据为空也要保留半角逗号
  • B. 对于包含英文半角逗号的数据,以 csv 文件保存时需进行转码处理
  • C. 因为 csv 文件可以由 Excel 打开,所以是二进制文件
  • D. 通常,csv 文件每行表示一个一维数据,多行表示二维数据

(9)下列文件/语法格式通常不用作高维数据存储的一项是(D)

  • A. HTML
  • B. XML
  • C. JSON
  • D. csv

(10)采用 Python 语言对 csv 文件写入,最可能采用的字符串方法是(C)

  • A. strip()
  • B. split()
  • C. join()
  • D. format()

PDF 讲义下载链接如下:
链接:https://pan.baidu.com/s/1rc8d2_mmtci0o5vtCSl6rg

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 《Linux+, 第七章: Linux 文件系统》是《Linux+认证教程》中的第七章,重点介绍了Linux操作系统中的文件系统。在这一章中,读者将了解到Linux文件系统的基本概念、常用的文件系统类型以及文件系统的管理和维护等内容。 首先,本章开始介绍了Linux文件系统的基本概念,包括文件和目录的概念以及在Linux中的表示方式。读者将学习到如何使用文件路径和文件名来访问文件和目录。同时,还介绍了Linux系统中的特殊目录,如根目录、用户主目录和共享目录等。 接着,本章继续讲解了常见的文件系统类型。Linux支持多种文件系统类型,如EXT4、XFS、Btrfs等。读者将了解到每种文件系统类型的特点和适用场景,并学习如何在Linux中创建和格式化不同类型的文件系统。 然后,本章讲解了文件系统的管理和维护。读者将学习如何使用命令行工具来管理和操作文件系统,如创建、删除、复制和移动文件等。同时,还介绍了文件系统的权限和属性配置,如设置文件的拥有者和权限等。 最后,本章还涉及了文件系统的备份和恢复。读者将学习如何使用备份工具来对文件系统进行备份,以及如何从备份中恢复数据。 通过学习本章内容,读者将深入了解Linux文件系统的原理和操作方法。这对于Linux系统管理员和开发人员来说非常重要,因为文件系统是Linux操作系统中最基础和核心的部分之一。掌握了文件系统的知识,读者将能够更好地管理和维护Linux系统,并解决文件系统相关的问题。 ### 回答2: 《Linux头歌》是一本关于Linux操作系统的技术书籍,第七章主要讲述了Linux文件系统的管理和操作。本章主要涵盖了以下几个方面的内容。 首先,本章介绍了Linux文件系统的基本概念和特点。Linux文件系统采用了类似于树状结构的层次目录结构,以根目录"/"为起点,通过不同的目录和文件来组织和管理数据。同时,Linux文件系统还具有对文件和目录进行权限管理的功能,确保安全性。 接着,本章详细介绍了如何在Linux系统中创建、删除、复制和移动文件和目录。通过命令行工具或图形界面工具,用户可以轻松地对文件和目录进行操作,满足不同的需求。此外,还介绍了文件和目录的属性和权限设置,确保文件的安全性。 然后,本章讲解了Linux文件系统中的硬链接和软链接的概念和用法。硬链接是指多个文件指向同一个物理存储空间,而软链接是指一个文件指向另一个文件,类似于快捷方式。用户可以根据需要使用不同的链接方式,帮助管理和组织文件。 最后,本章还介绍了Linux文件系统的挂载和卸载操作。在Linux系统中,用户可以通过挂载操作将外部设备或远程文件系统与本地文件系统连接起来,以便访问和操作外部文件。同时,也可以通过卸载操作安全地断开与外部文件系统的连接。 总之,第七章《Linux头歌》详细介绍了Linux文件系统的管理和操作技巧,帮助读者更好地理解和掌握Linux操作系统的文件系统特性和使用方法。无论是初学者还是有一定经验的用户,都可以从中获得实用的知识和技能,提高对Linux系统的操作能力。 ### 回答3: 《Linux内核设计与实现》是一本经典的Linux内核相关书籍,其中第七章主要介绍了Linux内核的关键组成部分——系统调用及库函数。系统调用是操作系统内核提供给用户程序的一组接口,它们允许用户程序通过内核来访问底层系统资源和服务。这一章内容对于深入理解 Linux 内核的使用和开发具有重要意义。 首先,第七章详细介绍了系统调用的实现原理和机制。作者解析了系统调用表的结构和功能,并且详细说明了Linux内核是如何通过系统调用号来定位和调用相应的系统调用函数的。这些系统调用函数在内核空间中运行,并能够处理用户程序发起的请求,实现具体的功能。 其次,本章还介绍了用户空间和内核空间之间的切换机制。当用户程序发起系统调用的时候,会触发用户态和内核态之间的转换,在转换过程中,内核会根据系统调用号找到对应的系统调用函数,并执行相应的操作。这一章详细分析了切换过程的细节以及相关的数据结构。 此外,本章还对一些常用的系统调用进行了详细介绍,如文件操作相关的系统调用(如open、read、write等),进程管理相关的系统调用(如fork、execve、wait等),以及网络通信相关的系统调用(如socket、bind、connect等)。对于开发者来说,熟悉这些系统调用的使用方法和原理非常重要,能够帮助他们更好地设计和开发Linux内核的应用程序。 总之,第七章《Linux内核设计与实现》详细介绍了Linux内核的系统调用和库函数的实现原理和机制,以及常用系统调用的使用方法。通过学习这一章的内容,读者能够深入理解Linux内核的工作原理,对于使用和开发Linux内核应用程序具有指导意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReadThroughLife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值