第十七节 文件
大家好!今天我们要讲一个重要的Python操作对象:文件。
关于程序中的交互的行为我们其实一直都在发生,比如,当你要获取用户的输入内容,并向用户打印出一些返回的结果,就会用到了 input() 与 print() 函数。
但是,我们有时会遇到一些需要持久化的信息,除了使用数据库以外,还有没有一些简单、灵活的方法呢?答案是有的。那就是今天我们要讲的python的文件。
1、回顾一下:input()与print()
说明:本例,我们用到了字符串的切片操作来实现文本翻转功能。如前所述,我们可以通过使用str[a:b:c] 来从位置 a 开始到位置 b 结束来对序列进行切片 。c是切片的步长(Step)。默认的步长为 1 ,它会返回一份连续的文本。如果给定一个负数步长,如 -1 ,将返回翻转过的文本。
2、文件操作函数:open()、read() 、readline()、write()、close()
(1)可以通过open()函数,创建(也就是“打开”)一个属于 file 文件类的对象。
(2)可以通过 read() 、readline()、write() 等方法来读取或写入文件。
(3)当你完成了文件使用,你可以调用 close()方法来关闭该文件的操作对象。
PS:读取或写入文件的能力取决于你指定以何种方式打开文件。
文件打开模式有:阅读模式( 'r' )、写入模式( 'w' )、追加模式( 'a' )、文本读取模式( 't' )、二进制读取模式( 'b' )。通过 help(open) 可以查看更多其他模式和细节。默认情况下, open() 会将文件视作文本读取方式打开。
3、Pickle
文件操作的确很方便,那么,除了文本内容以外,其他数据类型的对象,我们有没有办法也存储到一个文件中去呢?
是的,有的!似乎只要你有需求,Python就为你准备好了解决方案。
通过导入 Pickle 模块,你可以将任何纯 Python 对象存储到一个文件中,并在稍后将其取回,这也叫持久地存储对象。
封装:
首先通过 open 以写入(w)二进制(b)模式打开文件,然后调用 pickle 模块的 dump 函数。这一过程被称作封装(Pickling)。
拆封:
然后,我们通过 pickle 模块的 load 函数接收返回的对象。这个过程被称作拆封(Unpickling)。
4、Unicode
大家有没有注意到,我们编写的代码,一直都只用英文或数字。那遇到非英文,比如:中文,怎么办呢?
通常我们会引入unicode编码格式来解决中文的识别和显示问题,如下面的代码。其中,class就表示类,即类型。class ‘str’,显示为字符串的类型。
使用 unicode 编码的字符串,都以字母 u 开头,例如 u"hello world",但在python3以后,其实并不需要这么麻烦,默认都是unicode编码 。
5、utf-8
当我们读取未知文件或写入非英文字符文件时,我们需要在open()中将 Unicode 字符指定为“UTF-8”编码格式,建议将 # encoding = utf-8 这一注释,习惯性的放置在程序的顶端。
小结
本节课程,我们讨论了有关输入和输出的多种类型,包括临时的,和可持久化的,比如文件处理,以及有关 pickle 模块,还有关于 Unicode知识等等。
如果大家有兴趣,建议各位使用python独立开发一款自己的“通讯录”,怎么样?
任何问题可以在后面的留言中提出来讨论。当你独立完成这个项目以后,你应该自信自己已经成为了一个真正的python程序员了。
要想成为一名优秀的程序员,最重要的途径就是:多写代码!接下来,我们在下一集的扩展知识中,我们还将分享python更多有趣的功能。