探究python中open函数的使用


Posted in Python onMarch 01, 2016

最近,开始学习python的开发,遇到了一点文件操作的问题,探究一下open函数的使用。

一、open()的函数原型
open(file, mode=‘r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
从官方文档中我们可以看到open函数有很多的参数,我们常用的是file,mode和encoding,对于其它的几个参数,平时不常用,也简单介绍一下。
buffering的可取值有0,1, >1三个,0代表buffer关闭(只适用于二进制模式),1代表line buffer(只适用于文本模式),>1表示初始化的buffer大小;
encoding表示的是返回的数据采用何种编码,一般采用utf8或者gbk;
errors的取值一般有strict,ignore,当取strict的时候,字符编码出现问题的时候,会报错,当取ignore的时候,编码出现问题,程序会忽略而过,继续执行下面的程序。
newline可以取的值有None, \n,  \r, '', ‘\r\n' ,用于区分换行符,但是这个参数只对文本模式有效;
closefd的取值,是与传入的文件参数有关,默认情况下为True,传入的file参数为文件的文件名,取值为False的时候,file只能是文件描述符,什么是文件描述符,就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符。
二、file() 与open()
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,在我看来,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作。
三、参数Mode的基本取值

探究python中open函数的使用

r、w、a为打开文件的基本模式,对应着只读、只写、追加模式;
b、t、+、U这四个字符,与以上的文件打开模式组合使用,二进制模式,文本模式,读写模式、通用换行符,根据实际情况组合使用、

四、 常见的mode取值组合
1、r或rt    默认模式,文本模式读
2、rb      二进制文件
3、w或wt    文本模式写,打开前文件存储被清空
4、wb    二进制写,文件存储同样被清空 
5、a   追加模式,只能写在文件末尾
6、a+  可读写模式,写只能写在文件末尾 
7、w+ 可读写,与a+的区别是要清空文件内容
8、r+   可读写,与a+的区别是可以写到文件任何位置 

五、几个模式的区别
为了测试不同模式的区别,我们用一小段代码来测试写入文件中的直观不同。

test = [ "test1\n", "test2\n", "test3\n" ]
  f = open( "b.txt", "a+")
  try:
    for s in test:
      f.write( s )
  finally:
    f.close()

(1)a+与w+模式的区别

探究python中open函数的使用

(2)a+与r+模式

探究python中open函数的使用

在写入文件前,我们在上面那段代码中加上一句 seek(6),用来定位写入文件写入位置。

注意:r+模式打开文件时,此文件必须存在,否则就会报错,‘r'模式也如此
六、换行符带来的烦恼
当你用二进制模式将带有换行符的字符串写入txt文件时,数据存储是正确的,但是当用windows平台的记事本程序打开时,你看到的换行符确实一个个的小黑块,但是,用文本模式,就不存在这样的问题。
在这里,涉及到了不同平台由于编码的问题,而对换行符有不同的识别。unix或者linux系统识别\n为换行符的标识,但是windows平台的编码,对\n不予理睬。
但是python自身带有转化功能,用文本模式的时候,你不会看到由于平台不同而造成的换行效果不同,但是,二进制模式的时候,python便不会再去转化,是什么,就写进去什么,此时的换行符,再用文本模式打开,windows下就不识别‘\n'换行符了。

以上就是关于python中open函数使用方法的相关介绍,希望对大家的学习有所帮助。

Python 相关文章推荐
剖析Django中模版标签的解析与参数传递
Jul 21 Python
Python中数字以及算数运算符的相关使用
Oct 12 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
基于python生成器封装的协程类
Mar 20 Python
python实现AES加密和解密
Mar 27 Python
python使用MQTT给硬件传输图片的实现方法
May 05 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
学习和使用python的13个理由
Jul 30 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
python实现微信打飞机游戏
Mar 24 Python
python_tkinter弹出对话框创建
Mar 20 Python
Saltstack快速入门简单汇总
Mar 01 #Python
通过Python使用saltstack生成服务器资产清单
Mar 01 #Python
Python解析json文件相关知识学习
Mar 01 #Python
使用简单工厂模式来进行Python的设计模式编程
Mar 01 #Python
Python文件处理
Feb 29 #Python
python 默认参数问题的陷阱
Feb 29 #Python
简要讲解Python编程中线程的创建与锁的使用
Feb 28 #Python
You might like
中东人咖啡哲学
2021/03/03 咖啡文化
php框架Phpbean说明
2008/01/10 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP迭代与递归实现无限级分类
2017/08/28 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
2020/05/29 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
jquery实现的带缩略图的焦点图片切换(自动播放/响应鼠标动作)
2013/01/23 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
Python多线程和队列操作实例
2015/06/21 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
2018/02/18 Python
Linux下python与C++使用dlib实现人脸检测
2018/06/29 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
python正则表达式匹配[]中间为任意字符的实例
2018/12/25 Python
python 实现将多条曲线画在一幅图上的方法
2019/07/07 Python
Python类中self参数用法详解
2020/02/13 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
Luxplus瑞典:香水和美容护理折扣
2018/01/28 全球购物
社区志愿者心得体会
2014/01/03 职场文书
幼儿园元旦亲子活动方案
2014/02/17 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
离婚财产分配协议书
2014/10/21 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
ant design vue的form表单取值方法
2022/06/01 Vue.js