Python open函数用法详解及实例展示
《网络安全自学教程》
open函数使用详解
open() 可以打开一个文件,并返回文件对象。
语法
open( name, mode )
参数
r
只读模式返回值
1、打开文件
open() 打开的文件,必须使用 close() 关闭。
使用相对路径,打开同级目录下的文件,文件名可以自动补全
file = open('myFile')
print(file)
file.close()
输出:
<_io.TextIOWrapper name='myFile' mode='r' encoding='cp936'>
使用绝对路径,必须用斜杠 /
,不能用反斜杠 \
file = open('E:/data/PrCharm/pythonProject1/myFile')
print(file)
file.close()
2、文件打开模式
mode 参数可以设置文件打开的模式,共有16中模式,可以简化为四大类
模式 | 描述 |
---|---|
r | 只读模式(默认) |
r+ | 读写模式,文件不存在会报错 |
t | 文本模式 |
x | 写模式,创建文件,文件已存在会报错 |
w | 写模式,文件存在则打开(原内容删除),文件不存在则创建 |
w+ | 读写模式,文件存在则打开(原内容删除),文件不存在则创建 |
+ | 更新模式,可读可写 |
b | 二进制模式 |
rb | 二进制只读模式,常用于图片等非文本 |
rb+ | 二进制读写模式,常用于图片等非文本 |
wb | 二进制写模式,文件存在则打开(原内容删除),文件不存在则创建 |
wb+ | 二进制读写模式,文件存在则打开(原内容删除),文件不存在则创建 |
a | 追加模式,文件存在则打开(保留原内容),文件不存在则创建 |
ab | 二进制追加模式,文件存在则打开(保留原内容),文件不存在则创建 |
a+ | 读写模式,文件存在则打开(保留原内容),文件不存在则创建 |
ab+ | 二进制读写模式,文件存在则打开(保留原内容),文件不存在则创建 |
U | 换行模式(已弃用) |
接下来,我们演示一下常用模式的作用
2.1、创建文件
在当前目录创建文件,并写入内容
file = open('myFile', mode='x')
file.write('fist line hello python \n')
file.write('second line hello python \n')
file.write('third line hello python \n')
file.close()
当前目录会多出一个myFile文件,里面显示我们写入的内容
2.2、读取文件内容
读取文件内容常用的操作有:
需要注意的是,读取文件时,指针是从文件开头往后移动的,我们只能按照字符顺序读取并且不能重复读取。
比如,先读取全部内容,再读取一行内容,会发现读不到了,因为指针已经移动到文件末尾了,无法再向后移动了。
file = open('myFile', mode='r')
print('全部读取 \n', file.read())
print('读取一行 \n', file.readline())
file.close()
输出:
全部读取
fist line hello python
second line hello python
third line hello python
读取一行
2.3、写入文件
我们向 2.1 创建的文件里面,写入一行内容。
file = open('myFile', mode='w')
file.write('fourthly line hello python \n')
file.close()
会发现,内容被覆盖了,实际上这不是覆盖;写模式打开文件时,会清空文件原来的内容。
想保留原来的内容,可以用追加模式
file = open('myFile', mode='a')
file.write('fourthly line hello python')
file.close()
再看文件,原来的内容没有删除
3、中文编码错误
打开中文文件时,如果不指定字符集编码,会报错 UnicodeDecodeError: ‘gbk’ codec can’t decode byte
需要使用 encodiing 参数设置字符集,比如utf8
file = open('myFile', encoding='utf8')
print(file.read())
file.close()
输出:
中文内容
提示:大部分文件编码都是utf8,为了避免编码问题,可以在打开文件时,手动设置 encoding=‘utf8’
可以使用errors参数设置编码错误的处理方式。
比如:ignore,忽略错误,程序继续执行,但无法解析的字符会打印乱码
file = open('myFile', errors='ignore')
print(file.read())
file.close()
输出:
涓鏂
或者:replace,用?替换无法解析的字符
file = open('myFile', errors='replace')
print(file.read())
file.close()
输出:
涓�鏂�
4、缓冲区
buffing 参数可以设置缓冲区大小:
使用open() 打开文件时,建议不修改 buffing 参数的值,也就是打开缓冲区并保持默认大小。
因为,计算机内存的I/O速度远高于计算机外设(鼠标、键盘、硬盘等)的I/O速度,如果不适用缓冲区,内存和外设就必须同时进行读写操作。也就是说,内存必须等待外设输入(输出)一个字节之后,才能再次输出(输入)一个字节。这会让内存中的程序大部分时间都处于等待状态。
而使用缓冲区,程序就会将数据都输出到缓冲区,然后执行其他操作,然后由外设去缓冲区读取数据,内存和外设就不用同步操作了。
作者:士别三日wyx