最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:懂视网 责编:小采 时间:2020-11-27 14:17:18
文档

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

详解Python中open()函数指定文件打开方式的用法:当我们用open()函数去打开文件的时候,有好几种打开的模式。'r'->只读'w'->只写,文件已存在则清空,不存在则创建。'a'->追加,写到文件末尾'b'->二进制模式,比如打开图像、音频、word文件。'+'->
推荐度:
导读详解Python中open()函数指定文件打开方式的用法:当我们用open()函数去打开文件的时候,有好几种打开的模式。'r'->只读'w'->只写,文件已存在则清空,不存在则创建。'a'->追加,写到文件末尾'b'->二进制模式,比如打开图像、音频、word文件。'+'->

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

'r'->只读

'w'->只写,文件已存在则清空,不存在则创建。

'a'->追加,写到文件末尾

'b'->二进制模式,比如打开图像、音频、word文件。

'+'->更新(可读可写)

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

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'。

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

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

详解Python中open()函数指定文件打开方式的用法:当我们用open()函数去打开文件的时候,有好几种打开的模式。'r'->只读'w'->只写,文件已存在则清空,不存在则创建。'a'->追加,写到文件末尾'b'->二进制模式,比如打开图像、音频、word文件。'+'->
推荐度:
标签: 文件 打开的 python
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top