Python open及mode
本文从open及mode两个角度总结Python中文件读取写入的注意事项。
测试平台Windows10、deepin20.1
Python版本Python2.7.18、Python3.9.2
mode
关于mode的各种形式和含义如下表
| 模式 | 含义 | 文件是否存在 | 特性 |
|---|---|---|---|
| r | 只能读不能写 | 必须存在 | |
| w | 不能读只能写 | 可以不存在,如果文件存在则会清空内容 | |
| a | 不能读只能写 | 可以不存在 | 初始化时,python2文件指针在开头,python3文件指针在末尾,Windows、Linux均如此;写入时,总会把文件指针指向文件末尾 |
| r+ | 能读能写 | 必须存在 | 可以自由移动文件指针写入 |
| w+ | 能读能写 | 可以不存在,如果文件存在则会清空文件 | |
| a+ | 能读能写 | 可以不存在 | 初始化时,python2文件指针在开头,python3文件指针在末尾,Windows、Linux均如此;写入时,总会把文件指针指向文件末尾 |
| t/b | 文本模式/二进制模式 | t和b都不能单独使用,需要与r、a、w结合使用 |
在Windows平台下对一个文件读和写,读写中间要加上fflush, fsetpos, fseek, or rewind 操作
仅限于python2,python3不需要加上此操作
open
关于open在Python2和3中有下面三种
open
from io import open
codecs.open
Python2
with open(file,mode) as f:
print type(f)
输出:
<type 'file'>
from io import open
with open(file,mode) as f:
print type(f)
输出:
<class '_io.TextIOWrapper'>
python3
with open(file,mode) as f:
print(type(f))
输出:
<class '_io.TextIOWrapper'>
from io import open
with open(file,mode) as f:
print(type(f))
输出:
<class '_io.TextIOWrapper'>
在Python3中io.open是内建的open的别称
Python2中的io.open和Python3中的open是同一种类型
codecs.open
Python2中的open没有encoding的参数,所以codecs.open会方便指定编码
Python2或Python3中底层还是调用的内建的open
总结
如mode一节所述,内建的open在Python2和Python3中表现有差异,可以使用io.open进行统一
codecs.open应该在Python3中使用不多吧,没有使用过
解决方案:能用Python3(高版本)就用Python3
如有错误,请大佬指正!
参考
https://stackoverflow.com/questions/11176724/python-file-operations
浙公网安备 33010602011771号