009.Python对象类型——文件

 

获取文件的打开模式说明和文件相关常用方法请点击公众号学习资源下文件方法菜单。...

点击“蓝色”关注
凡凡Python笔记
前述
想必大多数编程者都知道文件的概念,也就是计算机中由操作系统管理的具有名字的存储区域。简而言之,内置 open 函数会创建一个 Python 文件对象,可以作为计算机上的一个文件链接。在调用 open 之后,你可以通过调用返回文件对象的方法来读写相关外部文件。


注意:与我们目前见过的类型相比,文件对象多少有些不寻常。它们不是数字、序列也不是对应。相反,文件对象只是常见文件处理任务输出模块。多数文件方法都与执行外部文件相关的文件对象的输入和输出有关,但其他文件方法可查找文件中的新位置、刷新输出缓存等。



打开文件
为了打开一个文件,程序会调用内置 open 函数,首先是外部名,接着是处理模式。模式典型地用字符串 r 代表为输入打开文件(默认值),w 代表为输出生成并打开文件,a 代表为在文件尾部追加内容而打开文件。处理模式参数也可以指定为其他选项:

1. 在模式字符串尾部加上 b 可以进行二进制数据处理。

2. 加上 + 意味着同时为输入和输出打开文件(也就是说,我们可以对相同文件对象进行读写,往往与对文件中的修改的查找操作配合使用)。


使用文件
一旦存在一个文件对象,就可以调用其他方法读写相关的外部文件。在任何情况下,Python 程序中的文本文件都采用字符串的形式。读取文件时会返回字符串形式的文本,文本作为字符串传递给 write 方法。如下是一些基础用法的提示:

1. 文件迭代器是最好的读取行工具。

2. 内容是字符串,不是对象。

3. close是通常选项。

4. 文件是缓冲的并且是可查找的。
实际应用中的文件
让我们看一个能够说明文件处理原理的简单例子。首先为输出而打开一个新文件,写入一个字符串(以行终止符
结束),之后关闭文件。接下来,我们将会在输入模式下再一次打开同一文件,读取该行。注意第二个 readline 调用返回一个空字符串。这是 Python 文件方法告诉我们已经到达文件底部(文件的空行是含有新行符的字符串,而不是空字符串):


注意:文件 write 方法调用返回了写入的字符数,这个例子把一行文件写成字符串,包括行终止符
。写入方法不会为我们添加行终止符,所以程序必须包含它来严格地终止行(否则,下次写入时会简单地延长文件的当前行)。



如果想要显示带有末行字符解释的文件内容,用文件对象的 read 方法把整个文件读入到一个字符串中,并打印它:
以这种方式编码的时候,open 临时创建的文件对象将自动在每次循环迭代的时候读入并返回一行。这种形式通常很容易编写,对于内存使用很好,并且比其他选项更快(当然,根据有多少变量)。


在文件中存储并解析 Python 对象
现在,让我们创建一个较大的文件。下面这个例子将把多种 Python 对象占用多行写入文本文件。需要注意的是,我们必须使用转换工具把对象转成字符串。注意文件数据在脚本中一定是字符串,而写入方法不会自动地替我们做任何向字符串格式转换的工作(对于空格,在这里我将从写方法中忽视字节计数返回值):
现在我们不得不使用其他转换工具,把文本文件中的字符串转换成真正的 Python 对象。鉴于 Python 不会自动把字符串转换为数字或其他类型的对象,如果我们需要使用诸如索引、加法等普通对象工具,就得这么做:
使用字符串 rstrip 方法去掉多余的行终止符,line[:-1] 分片也要以,但是只有确定所有行都含有
的时候才行(文件中最后一行有时候会没有)。使用字符串 split 方法,从逗号分隔符的地方将整行断开,得到的结果就是含有个别数字的子字符串列表。最后,要转换文件第三行所储存的列表和字典,我们可以运行 eval 这一内置函数,eval 能够把字符串当作可执行程序代码:
因为所有这些解析和转换的最终结果是一个普通 Python 对象列表,而不是字符串。现在我们可以在脚本内应用列表和字典操作了。


用 pickle 存储 Python 的原生对象
pickle 模块是能够让我们直接在文件中存储几乎任何 Python 对象的高级工具,也并不要求我们把字符串转换来转换去。它就像是超级通用的数据格式化和解析工具。例如,想要在文件中存储在字典,就直接用 pickle 来储存。
我们取回等价的字典对象,没有手动断开或转换的要求。pickle 模块执行所谓的对象序列化,也就是对象和字节字符串之间的相互转换。但我们要做的工作却很少。事实上,pickle 内部将字典转成字符串形式,不过这其实没什么可看的。因为 pickle 能够依靠这一格式重建对象,我们不必自己手动来处理。


注意:我们以二进制模式打开用来存储 pickle 化的对象的文件,二进制模式总是 Python3 中必需的,因为 pickle 程序创建和使用一个 bytes 字符串对象,并且这些对象意味着二进制模式文件。在早期 Python 中,对于协议 0 使用文本模式文件是没有问题的(默认情况下,它创建 ASCII 文本),只要一致地使用文本模式;较高的协议要求二进制模式文件。Python3 的默认协议是 3(二进制),但是,它即便对于协议 0 也创建 bytes。

END


凡凡Python笔记

网站:fanfanblog.cn





长按左边二维码扫描关注!!!



点击“阅读原文”


    关注 凡凡Python笔记


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册