搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 凡凡Python笔记 > 009.Python对象类型——文件

009.Python对象类型——文件

凡凡Python笔记 2017-10-30



点击“蓝色”关注

凡凡Python笔记


前述


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


009.Python对象类型——文件

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

009.Python对象类型——文件


打开文件


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

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

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


使用文件


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

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

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

3. close是通常选项。

4. 文件是缓冲的并且是可查找的。


实际应用中的文件


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


009.Python对象类型——文件


009.Python对象类型——文件

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

009.Python对象类型——文件

如果想要显示带有末行字符解释的文件内容,用文件对象的 read 方法把整个文件读入到一个字符串中,并打印它:


009.Python对象类型——文件


以这种方式编码的时候,open 临时创建的文件对象将自动在每次循环迭代的时候读入并返回一行。这种形式通常很容易编写,对于内存使用很好,并且比其他选项更快(当然,根据有多少变量)。


在文件中存储并解析 Python 对象


现在,让我们创建一个较大的文件。下面这个例子将把多种 Python 对象占用多行写入文本文件。需要注意的是,我们必须使用转换工具把对象转成字符串。注意文件数据在脚本中一定是字符串,而写入方法不会自动地替我们做任何向字符串格式转换的工作(对于空格,在这里我将从写方法中忽视字节计数返回值):


009.Python对象类型——文件


现在我们不得不使用其他转换工具,把文本文件中的字符串转换成真正的 Python 对象。鉴于 Python 不会自动把字符串转换为数字或其他类型的对象,如果我们需要使用诸如索引、加法等普通对象工具,就得这么做:


009.Python对象类型——文件


使用字符串 rstrip 方法去掉多余的行终止符,line[:-1] 分片也要以,但是只有确定所有行都含有 \n 的时候才行(文件中最后一行有时候会没有)。使用字符串 split 方法,从逗号分隔符的地方将整行断开,得到的结果就是含有个别数字的子字符串列表。最后,要转换文件第三行所储存的列表和字典,我们可以运行 eval 这一内置函数,eval 能够把字符串当作可执行程序代码:


009.Python对象类型——文件


因为所有这些解析和转换的最终结果是一个普通 Python 对象列表,而不是字符串。现在我们可以在脚本内应用列表和字典操作了。


用 pickle 存储 Python 的原生对象


pickle 模块是能够让我们直接在文件中存储几乎任何 Python 对象的高级工具,也并不要求我们把字符串转换来转换去。它就像是超级通用的数据格式化和解析工具。例如,想要在文件中存储在字典,就直接用 pickle 来储存。


009.Python对象类型——文件


我们取回等价的字典对象,没有手动断开或转换的要求。pickle 模块执行所谓的对象序列化,也就是对象和字节字符串之间的相互转换。但我们要做的工作却很少。事实上,pickle 内部将字典转成字符串形式,不过这其实没什么可看的。因为 pickle 能够依靠这一格式重建对象,我们不必自己手动来处理。


009.Python对象类型——文件

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

009.Python对象类型——文件


END


凡凡Python笔记

网站:fanfanblog.cn

009.Python对象类型——文件

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


点击“阅读原文”

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《009.Python对象类型——文件》的版权归原作者「凡凡Python笔记」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注凡凡Python笔记微信公众号

凡凡Python笔记微信公众号:FanfanPyNote

凡凡Python笔记

手机扫描上方二维码即可关注凡凡Python笔记微信公众号

凡凡Python笔记最新文章

精品公众号随机推荐

上一篇 >>

Grammar Tales Bundle