Python open()文件处理使用介绍


Posted in Python onNovember 30, 2014

1. open()语法

open(file[, mode[, buffering[, encoding[, errors[, newline[, closefd=True]]]]]])
open函数有很多的参数,常用的是file,mode和encoding
file文件位置,需要加引号
mode文件打开模式,见下面3
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内核的系统中,打开一个文件,便会返回一个文件描述符。

2. Python中file()与open()区别
两者都能够打开文件,对文件进行操作,也具有相似的用法和参数,但是,这两种文件打开方式有本质的区别,file为文件类,用file()来打开文件,相当于这是在构造文件类,而用open()打开文件,是用python的内建函数来操作,建议使用open

3. 参数mode的基本取值

Character Meaning
‘r' open for reading (default)
‘w' open for writing, truncating the file first
‘a' open for writing, appending to the end of the file if it exists
‘b' binary mode
‘t' text mode (default)
‘+' open a disk file for updating (reading and writing)
‘U' universal newline mode (for backwards compatibility; should not be used in new code)

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

常见的mode取值组合

r或rt 默认模式,文本模式读
rb   二进制文件
 
w或wt 文本模式写,打开前文件存储被清空
wb  二进制写,文件存储同样被清空
 
a  追加模式,只能写在文件末尾
a+ 可读写模式,写只能写在文件末尾
 
w+ 可读写,与a+的区别是要清空文件内容
r+ 可读写,与a+的区别是可以写到文件任何位置

4. 测试
测试文件test.txt,内容如下:

Hello,Python
3water.com
This is a test file

用一小段代码来测试写入文件直观的显示它们的不同

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

a+、w+和r+模式的区别(测试后还原test.txt)
a+模式

# cat test.txt
Hello, Python
3water.com
This is a test file
test1
test2
test3

w+模式

# cat test.txt
test1
test2
test3

r+模式
在写入文件前,我们在上面那段代码中加上一句f.seek(0),用来定位写入文件写入位置(文件开头),直接覆盖字符数(注意\n也是一个字符)

# cat test.txt
test1
test2
test3
inuxeye.com
This is a test file

注意:r+模式打开文件时,此文件必须存在,否则就会报错,‘r'模式也如此
其他测试

>>> f = open('test.txt')
>>> f.read() #读取整个文件,字符串显示
'Hello,Python\n3water.com\nThis is a test file\n'
>>> f.read() #指针在文件末尾,不能再读取内容
''
>>> f = open('test.txt')
>>> f.readline() #一次读一行,指针在该行末尾
'Hello,Python\n'
>>> f.tell() #改行的字符长度
13
>>> f.readline()
'3water.com\n'
>>> f.tell()
30
>>> f.readline()
'This is a test file\n'
>>> f.tell()
50
>>> f.readline()
''
>>> f.tell() #指针停在最后一行
50
>>> f = open('test.txt')
>>> f.readlines() #读取整个文件,以列表显示
['Hello,Python\n', '3water.com\n', 'This is a test file\n']
>>> f.tell() #指针在最后一行
50
>>> f = open('test.txt','w') #覆盖创建新文件
>>> f.write('Hello,Python!') #如果写入内容小于1024,会存在内存,否则需要刷新
>>> f.flush() #写入到硬盘
>>> f.close() #关闭文件会自动刷新
>>> f.write('Hello,Linuxeye') #关闭后,写失败,提示文件已经关闭
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file
Python 相关文章推荐
Python中的字典遍历备忘
Jan 17 Python
Python程序中的观察者模式结构编写示例
May 27 Python
Python下的Softmax回归函数的实现方法(推荐)
Jan 26 Python
Python退火算法在高次方程的应用
Jul 26 Python
numpy.ndarray 交换多维数组(矩阵)的行/列方法
Aug 02 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
python django框架中使用FastDFS分布式文件系统的安装方法
Jun 10 Python
python itchat实现调用微信接口的第三方模块方法
Jun 11 Python
在python tkinter中Canvas实现进度条显示的方法
Jun 14 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
Python fileinput模块使用介绍
Nov 30 #Python
Python 列表list使用介绍
Nov 30 #Python
Python 字典dict使用介绍
Nov 30 #Python
Python 序列化 pickle/cPickle模块使用介绍
Nov 30 #Python
Linux下Python获取IP地址的代码
Nov 30 #Python
Python re模块介绍
Nov 30 #Python
Python os模块介绍
Nov 30 #Python
You might like
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
通过 Dom 方法提高 innerHTML 性能
2008/03/26 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
使用wxapp-img-loader自定义组件实现微信小程序图片预加载功能
2018/10/18 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
[04:21]狐狸妈带你到现场 DOTA2 TI中国区预选赛线下赛路线指引
2014/05/22 DOTA
python实现从ftp服务器下载文件的方法
2015/04/30 Python
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
简单实现Python爬取网络图片
2018/04/01 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python redis 删除key脚本的实例
2019/02/19 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
python连接PostgreSQL过程解析
2020/02/09 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传
2016/01/20 HTML / CSS
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
2014年电厂个人工作总结
2014/11/27 职场文书
经济纠纷起诉状
2015/05/20 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
《围炉夜话》110句人生箴言,精辟有内涵,引人深思
2019/10/23 职场文书
MySQL的Query Cache图文详解
2021/07/01 MySQL