探究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 相关文章推荐
跟老齐学Python之编写类之二方法
Oct 11 Python
详解Python使用simplejson模块解析JSON的方法
Mar 24 Python
对python中字典keys,values,items的使用详解
Feb 03 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 Python
Python中join()函数多种操作代码实例
Jan 13 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
python 两个一样的字符串用==结果为false问题的解决
Mar 12 Python
Python使用plt.boxplot() 参数绘制箱线图
Jun 04 Python
python3.x中安装web.py步骤方法
Jun 23 Python
使用python绘制分组对比柱状图
Apr 21 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
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
php实现的三个常用加密解密功能函数示例
2017/11/06 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
用js实现键盘方向键翻页功能的代码
2007/06/03 Javascript
JQuery优缺点分析说明
2011/04/10 Javascript
JavaScript AJAX之惰性载入函数
2014/08/27 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
jQuery选择器中的特殊符号处理方法
2017/09/08 jQuery
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
[00:57]辉夜杯战队访谈宣传片—VG
2015/12/25 DOTA
Python实现压缩与解压gzip大文件的方法
2016/09/18 Python
Pycharm技巧之代码跳转该如何回退
2017/07/16 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
用Python实现KNN分类算法
2017/12/22 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
Python实现EXCEL表格的排序功能示例
2019/06/25 Python
Python如何省略括号方法详解
2020/03/21 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
2020/08/07 Python
python模拟点击在ios中实现的实例讲解
2020/11/26 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
雅诗兰黛香港官网:Estee Lauder香港
2017/09/26 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
Blancsom美国/加拿大:服装和生活用品供应商
2018/07/27 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
宿舍违规用电检讨书
2014/02/16 职场文书
特岗教师个人总结
2015/02/10 职场文书
利用python调用摄像头的实例分析
2021/06/07 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS