知行编程网知行编程网  2022-12-04 09:00 知行编程网 隐藏边栏  7 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于详解Python中open()函数指定文件打开方式的用法的相关知识,希望可以帮到处于编程学习途中的小伙伴

Python中open()函数指定文件打开方式的使用详解

当我们使用open()函数打开一个文件时,有几种打开方式。

'r'->只读
'w'->只写,文件已存在则清空,不存在则创建。
'a'->追加,写到文件末尾
'b'->二进制模式,比如打开图像、音频、word文件。
'+'->更新(可读可写)

这个带'+'号的有点难以理解,上代码感受下。

with open('foo.txt', 'w+') as f: 
    f.write('bar\n') 
    f.seek(0)  
    data = f.read()

可以看到,上面的代码不仅可以写,还可以读。注意一定要先定位到开头,f.seek(0),否则读出的是空数据。

可能有人会疑惑,既然'+'号是可读可写的,那么'w+'和'r+'有什么区别。

那就是,

'w+' 将被清除并创建(如果文件存在,则清除,如果不存在,则创建。)

'r+'不清空,不创建

不要用二进制模式打开文本文件

先看下面代码的“诡异”现象。

假设在Windows下,我有一个f.txt文件,文件内容如下。

hello

world


代码一

with open('f.txt', 'r') as f: 
    print f.readlines() 
with open('f.txt', 'rb') as f: 
    print f.readlines()

输出

['hello\n', 'world\n']
['hello\r\n', 'world\r\n']


代码二

with open('f.txt', 'rb') as f: 
    data = f.read() 
with open('f.txt', 'w') as f: 
    f.write(data)


打开文件,变成了下面这样,

hello^M

world^M

首先,先理解换行符'\n'跟回车符'\r'的概念。

'\n',换行符(LF,Line-Feed ),指新的一行。
'\r',回车符(CR,Carriage-Return),指回到行头。

因为在不同系统下的换行标识是不一样的。

windows->'\r\n'
unix->'\n'
mac->'\r'

这就是为什么windows下的txt在linux打开的时候行尾会有'^M'。

所以我在linux下运行脚本将游戏数据导出到本地windows,打开成一行。

其实文本文件也是二进制文件,是一种文本编码的二进制文件。文本文件处理一些不可见的字符以增加可读性。

python中,可以通过os.linesep获取当前系统的换行标志。比如在windows下,os.linesep就是'\r\n'。

python中操作换行符时,不管在什么平台,直接使用'\n'即可,python会根据不同的系统自动转换成不同的标记。

有了以上的理论基础,我们就可以分析本文开头代码的“怪异”现象了。

代码1中,对于以文本方式打开的文件,换行符会被python处理为'\n',但以二进制方式打开时,换行符将保持不变。

代码2中,以二进制方式打开,以文本方式写入。 binary打开的时候还是'\r\n',而用文本方式写的时候,因为python会把'\n'转成'\r\n',所以其实相当于写'\r\r ' \n',所以多了一个'^M'。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享