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

posted @ 2021-03-12 14:51  Makerdd  阅读(845)  评论(0)    收藏  举报