Python 基础入门前五篇:
这次将介绍有关文件和异常的处理,包括读写文本文件、二进制文件、JSON 文件,异常处理,以及 pathlib
模块的介绍。
本文的目录如下:
1. 文件
简介
Python 中读取、写入文件,都可以通过方法 open()
实现,该方法用于打开一个文件,然后返回文件对象,如果文件不存在或者无法打开,会报错 OSError
。
open
方法的语法如下:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
几个参数说明:
- file:必需,文件路径,相对或者绝对路径皆可;
- mode:可选,文件打开的模式
- buffering:设置缓冲
- encoding:一般采用
utf8
- errors:报错级别
- newline:区分换行符
- closefd:传入的 file 参数类型
常用的文件打开模式如下:
操作模式 | 具体含义 |
---|---|
r | 读取(默认文件打开模式) |
w | 写入(会截断前面的内容) |
x | 写入,如果文件已经存在会产生异常 |
a | 追加,将内容写入到已有文件末尾 |
b | 二进制模式 |
t | 文本模式(默认) |
+ | 更新(既可以读又可以写) |
其中 r
、 w
、a
是三选一,表明读取或者写入,然后可以添加其他几种模型,即还存在:
rb
,r+
,rb+
wb
,w+
,wb+
ab
,a+
,ab+
对于 open
方法返回的 file
文件对象,它常用函数有:
- close():关闭文件
- flush():将内部缓冲区数据立刻写入文件
- read([size]):从文件读取指定的字节数,如果没有或者是负数值,则读取所有
- readline():读取整行,包含换行符
\n
字符 - readlines([sizeint]):读取所有行并返回列表,若给定
sizeint>0
,返回总和大约为sizeint
字节的行, 实际读取值可能比sizeint
较大, 因为需要填充缓冲区。 - write(str):将字符串写入文件,返回的是写入字符的长度
- writelines(sequence):向文件写入一个序列字符串列表,如果需要换行,需要自己添加每行的换行符
- seek(offset[, whence]):设置文件当前位置
- tell():返回文件当前位置。
- truncate([size]:从文件的首行首字符开始截断,截断文件为
size
个字符,无size
表示从当前位置截断;截断之后后面的所有字符被删除,其中 Windows 系统下的换行代表 2个字符大小。
读取文本文件
读取文本文件,必须传入文件路径,然后打开模式指定为 r
,接着就就是通过 encoding
参数指定编码,当然不设置这个编码参数,它默认值是 None
,读取文件将采用操作系统默认的编码,通常如果文件内容不带有中文,这种方法是没问题的,如果带有中文内容,则必须指定 encoding='utf8'
才能正常打开文件。
以下是一个使用例子:
# 方法1
f = open('test.txt', 'r')
print(f.read())
f.close()
输出结果:
life is short, I use Python.
Machine Learning
Computer Vision
这是第一种使用方法,这种方法的问题就是如果忘记调用 close
方法关闭文件,会出现错误,因此推荐使用上下文语法,通过 with
关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,此外,读取文件内容,可以直接调用 read()
方法,也可以采用 for-in
循环读取:
# 方法2
with open('test.txt', 'r') as fr:
print(fr.read())
# 方法3 读取文件也可以采用 for-in 循环逐行读取
with open('test.txt', 'r') as fr:
for line in fr:
print(line.strip())
2. 异常
Python 有两种错误很容易辨认:语法错误和异常。
语法错误也称为解析错,比如下面这个例子:
while True
print('hello')
会报错误,这里指出语法错误的地方,就是缺少非常重要的冒号 :
File "<ipython-input-41-b385275d6655>", line 1
while True
^
SyntaxError: invalid syntax
而异常,是运行期检测到的错误,即解析成功后,开始运行时的错误,比如执行除法操作时候,除数是 0 的情况;读取文件的时候,文件路径错误;变量没有定义的情况等等。
异常处理
异常的处理,就是采用 try-exception
语句,例子如下:
def read_file(file_name)