文件打开方式

当我们用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'。

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

本文地址: http://www.cppcns.com/jiaoben/python/152407.html

python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...相关推荐

  1. sh执行文件 参数传递_详解shell中脚本参数传递的两种方式

    方式一:$0,$1,$2.. 采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${ ...

  2. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  3. python比较两个字符串相似度_详解Python 字符串相似性的几种度量方法

    字符串的相似性比较应用场合很多,像拼写纠错.文本去重.上下文相似性等. 评价字符串相似度最常见的办法就是:把一个字符串通过插入.删除或替换这样的编辑操作,变成另外一个字符串,所需要的最少编辑次数,这种 ...

  4. python用turtle画字母n、h_详解python使用turtle库来画一朵花

    看了群主最后成像的图片,应该是循环了36次画方框,每次有10度的偏移. 当然不能提前看答案,自己试着写代码. 之前有用过海龟画图来画过五角星.奥运五环.围棋盘等,所以感觉不难. # !/usr/bin ...

  5. linux中用zip压缩文件,详解Linux中zip压缩和unzip解压缩命令及使用详解

    下面给大家介绍下Linux中zip压缩和unzip解压缩命令详解 1.把/home目录下面的mydata目录压缩为mydata.zip zip -r mydata.zip mydata #压缩myda ...

  6. python scatter参数详解_Python 中 scatter 函数参数及用法详解

    Python 中 scatter 函数参数及用法详解 Python 中 scatter 函数参数及用法详解 这里有新鲜出炉的 Python 教程, 程序狗速度看过来! Python 编程语言 Pyth ...

  7. python中文件打开的合法模式组合_详解python中各种文件打开模式

    在python中,总的来说有三种大的模式打开文件,分别是:a, w, r 当以a模式打开时,只能写文件,而且是在文件末尾添加内容. 当以a+模式打开时,可以写文件,也可读文件,可是在读文件的时候,会发 ...

  8. python读写文件详解,将数据写入一个文件或读一个文件写入另一个文件中。

    目录 实践一:读取文件并打印,read() 实践二:读取文件的一行并打印,readline() 实践三:读取文件的所有行存入到一个列表中并打印,readlines() 实践四:向文件中写入字符串,wr ...

  9. 群晖rsync同步详解_FreeNas中使用rsync同步文件

    声明:本文为本站[NASGEEK]原创文章,未经许可不得转载! FreeNas上有各种方法可以备份同步文件,比如云同步任务.安装syncthing插件等.这里介绍一个十分简便的同步方法:rsync.这 ...

最新文章

  1. C++11中rvalue references的使用
  2. linux内核用什么调试,什么是开发/调试Linux内核最有效和最优雅的方式
  3. RK3288 GMAC整理
  4. SugarCRM 在Html中增加超连接按钮
  5. 如何解决文件不存在_传奇微端配置Pak密码文件不存在怎么解决?传奇分享汇
  6. 编程环境中Runtime(运行时)的三个含义
  7. linux那些事之中断与异常(AMD64架构)_1
  8. java继承案例分析,Java day5【第十四章】继承案例分析
  9. Oracle单实例开机自启动
  10. linux下oracle登陆建表,Oracle建表过程初学
  11. 汇编语言学习之安装编译器及书籍选择
  12. android 关联按键和坐标,给大家分享一个,按键精灵安卓版,找多图, 以及找多图返回多个坐标的,相信大家绝对用得到 _ 按键精灵手机版 - 按键精灵论坛...
  13. 40163 php,【PHP】微信支付JsApi 40163错误,_PHP_ 少侠科技
  14. Shell脚本加密工具——Shc
  15. 13视频监控-01视频监控布局-videobox
  16. RMQ---csu1809
  17. 自我检查,看清自己 看清自己什么皮肤。
  18. 我在哪?(寒假每日一题 35)
  19. 艾司博讯:拼多多商品怎样多件一起付款?
  20. 新手如何进行PLC的远程上下载和编程调试?

热门文章

  1. 左转待转区----当同向直行信号灯绿灯亮时,左转弯的车辆进入左转待转区等候放行信号(即使此时左转弯灯是红色的) 注意:当直行红灯时候禁止进入...
  2. 如何解读「量子计算应对大数据挑战:中国科大首次实现量子机器学习算法」?——是KNN算法吗?...
  3. python 字典过滤
  4. Django xadmin 后台自定义action 动作
  5. Altium Designer 使用小结
  6. [置顶] 也论百度轻应用--一个开发者的吐槽
  7. drf-频率组件 权限组件
  8. 文本分类实战(七)—— Adversarial LSTM模型
  9. 关于PHP 使用 unset 销毁变量 但是 没有销毁内存的 记录
  10. Python标准库:内置函数dict(mapping, **kwarg)