文件操作
在Python中课通过内置的open
函数实现文件的读写操作。可以指定文件名,操作模式,编码信息等来获得操作文件的对象。
操作模式 | 具体含义 |
---|---|
'r' | 读取 (默认) |
'w' | 写入(会先截断之前的内容) |
'x' | 写入,如果文件已经存在会产生异常 |
'a' | 追加,将内容写入到已有文件的末尾 |
'b' | 二进制模式 |
't' | 文本模式(默认) |
'+' | 更新(既可以读又可以写) |
读写文本文件
读取文件时,需要在使用open
函数时制定好带路径的文件名,并将文件模式设置为’r‘,然后通过encoding参数指定编码,如果不能保证保存文件时使用的编码方式与encoding参数指定的编码方式是一致的,那么就会因无法解码字符导致读取失败。
如果文件并不存在或者无法打开,那么将引发异常状况导致程序崩溃。可以通过异常机制对可能在运行时发生状况的代码进行适当的处理。
在Python中,我们可以将那些在运行时可能会出现状况的代码放在try
代码块中,在try
代码块的后面可以跟上一个或多个except
来捕获可能出现的异常状况。例如在上面读取文件的过程中,文件找不到会引发FileNotFoundError
,指定了未知的编码会引发LookupError
,而如果读取文件时无法按指定方式解码会引发UnicodeDecodeError
,我们在try
后面跟上了三个except
分别处理这三种不同的异常状况。最后我们使用finally
代码块来关闭打开的文件,释放掉程序中获取的外部资源,由于finally
块的代码不论程序正常还是异常都会执行到(甚至是调用了sys
模块的exit
函数退出Python环境,finally
块都会被执行,因为exit
函数实质上是引发了SystemExit
异常),因此我们通常把finally
块称为“总是执行代码块”,它最适合用来做释放外部资源的操作。如果不愿意在finally
代码块中关闭文件对象释放资源,也可以使用上下文语法,通过with
关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,代码如下所示。
除了使用文件对象的read
方法读取文件之外,还可以使用for-in
循环逐行读取或者用readlines
方法将文件按行读取到一个列表容器中,代码如下所示。
文件写入操作,在使用open函数时,制定好文件名并将文件模式改为w即可。如果是对文件内容追加,则要设置为a。
读写二进制文件
实现了复制图片文件的功能。
读写JSON文件
如果希望把一个列表或者一个字典中的数据保存到文件中又该怎么做呢?答案是将数据以JSON格式进行保存。使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。
重要函数
-
dump
将Python对象按照JSON格式序列化到文件中
-
dumps
将Python对象处理成JSON格式的字符串
-
load
将文件中的JSON数据反序列化成对象
-
loads
将字符串的内容反序列化成Python对象