详解Python中open()函数指定文件打开方法的用法
当前位置:以往代写 > Python教程 >详解Python中open()函数指定文件打开方法的用法
2019-06-14

详解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会自动按照差异系统转成差异标识。

有了上面这些理论依据,就可以理会本文开头代码的“诡异”现象了。

代码一中,用文本模式打开的文件,换行标识会被python处理惩罚成'\n',而用二进制模式打开则原封不动。

代码二中,用二进制模式打开,用文本模式写入。二进制打开原封不动照旧'\r\n',而文本模式写入的时候因为python会把'\n'转成'\r\n',所以其实就便是是写入了'\r\r\n',于是就多了个'^M'。

    关键字:

在线提交作业