• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞java代码 3年前 (2022-05-21) 33次浏览 已收录 0个评论

当我们用open()函数去打开文件的时候,有好几种打开的模式。

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

www#gaodaima.com来源gaodai$ma#com搞$$代**码)网搞代码

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

with open('foo.txt', 'w+') as f: 
    f.write('bar
') 
    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
', 'world
']
['hello
', 'world
']

代码二

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

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

hello^M

world^M

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

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

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

windows->'
'
unix->'
'
mac->''

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

这就是为什么我在linux下跑脚本导出游戏数据下到本地windows打开变成了一行。

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

在python中,可以通过os.linesep获得当前系统的换行标识。比如在windows下,os.linesep是'
'。

在python中操作换行标识的时候,并不用管是在什么平台下,直接用'
'就行了,python会自动根据不同系统转成不同标识。

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

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

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

来源:搞代码网:原文地址:https://www.gaodaima.com


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Python中open()函数指定文件打开方式的用法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址