文件读写
文件读写是最基本的IO操作,在Python中内置了open函数来用于文件的读写操作,此函数创建一个文件对象,该对象将用于调用与其相关联的其他支持方法。
open函数基本语法:
open(filename, mode, buffering, encoding, errors)
参数 | 说明 |
---|---|
filename | 文件的名字,或者文件名字的相对路径 |
mode | 对文件执行的操作模式 |
buffering | 如果buffering值设置为0,则不会发生缓冲。 如果缓冲值buffering为1,则在访问文件时执行行缓冲。如果将缓冲值buffering指定为大于1的整数,则使用指定的缓冲区大小执行缓冲操作。如果为负,则缓冲区大小为系统默认值(默认行为)。 |
encoding | 指定文件的编码格式 |
errors | 错误处理 |
以下是打开文件使用的模式的列表:
模式 | 解释 |
---|---|
r | 打开的文件为只读模式。文件指针位于文件的开头,这是默认模式。 |
rb | 打开仅用二进制格式读取的文件。文件指针位于文件的开头,这是默认模式。 |
w | 打开仅供写入的文件。 如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。 |
wb | 打开仅用二进制格式写入的文件。如果文件存在,则覆盖该文件。 如果文件不存在,则创建一个新文件进行写入。 |
a | 打开一个文件进行追加。 如果文件存在,则文件指针位于文件末尾。也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。 |
ab | 打开一个二进制格式的文件。如果文件存在,则文件指针位于文件末尾。 也就是说,文件处于追加模式。如果文件不存在,它将创建一个新文件进行写入。 |
示例:
file = open('1.txt', 'r', encoding='utf-8', errors='ignore')
for i in file.readlines():
print(i)
open函数打开文件后得到的是一个文件对象,使用readlines方法得到一个列表,使用for循环遍历,并将结果打印到终端。
文件对象可使用的方法:
方法 | 说明 |
---|---|
read() | 来直接读取字节到字符串中,可以指定读取数目,默认是文件将被读取直至末尾 |
readline() | 识别’\n’换行符来读取文件的一行数据 |
readlines() | 用来将读取的所有行作为一个字符串列表返回 |
write() | 将内容写入文件 |
文件读写异常处理
在文件的读写中开始很简单很少的代码就可以实现,但是文件在进行读写的过程中是最容易出错的,而且多数是无法预知的,试想如果一台生产服务器如果出现了差错给用户带来的体验就是级差的,所以这个时候对于异常处理就特别重要了。
在Python中捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
如果你不想在异常发生时结束你的程序,只需在try里捕获它。
使用语法:
try:
<语句> #运行别的代码
except <错误名字> as :
<语句> #如果引发了错误异常,获得附加的数据
else:
<语句>
try的工作原理是,当开始一个try语句后,python就在当前程序的上下文中作标记,这样当异常出现时就可以回到这里,try子句先执行,接下来会发生什么依赖于执行时是否出现异常。
- 如果当try后的语句执行时发生异常,python就跳回到try并执行第一个匹配该异常的except子句,异常处理完毕,控制流就通过整个try语句(除非在处理异常时又引发新的异常)。
- 如果在try后的语句里发生了异常,却没有匹配的except子句,异常将被递交到上层的try,或者到程序的最上层(这样将结束程序,并打印缺省的出错信息)。
- 如果在try子句执行时没有发生异常,python将执行else语句后的语句(如果有else的话),然后控制流通过整个try语句。
示例:
try: # 如果文件打开失败了就执行except中的代码,然后继续执行,而不是出现程序崩溃
with open('1.txt', 'r', encoding='utf-8', errors='ignore') as file:
for i in range(10):
lines = file.readline()
print(lines, end='')
except FileExistsError as e: # 表示将异常保存到e里面,方便后面显示错误
print(e)
print('指定文件无法打开')
else:
print('程序执行结束')
说明:因为使用了with…as…语句,所有当我们打开了文件后无论最后程序是否正常执行完毕都能够自动的关闭文件。详细的异常错误参见菜鸟教程-python标准异常
注意:
在读取某个文件的时候,如果该文件已经被读取到某个变量或者某个列表之后,再次调用该变量的时候将无法读取。因为记录当前文件位置的指针已经移到了最后。
在实际的生产服务器开发中,我们应该遵循给用户的最小惊讶原则。将有可能出错而影响程序执行的语句放在try语句下面来执行。这样可以防止程序崩溃。