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中__call__内置函数用法实例
Jun 04 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
Python面向对象程序设计类变量与成员变量、类方法与成员方法用法分析
Apr 12 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
python语言基本语句用法总结
Jun 11 Python
用Python爬取QQ音乐评论并制成词云图的实例
Aug 24 Python
使用Python脚本从文件读取数据代码实例
Jan 19 Python
Python类如何定义私有变量
Feb 03 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
python tkinter模块的简单使用
Apr 07 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP实现多图上传和单图上传功能
2018/05/17 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
jQuery的Scrollify插件实现滑动到页面下一节点
2015/07/05 Javascript
JavaScript数组操作详解
2017/02/04 Javascript
写给vue新手们的vue渲染页面教程
2017/09/01 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
Vue中android4.4不兼容问题的解决方法
2018/09/04 Javascript
原生JS实现自定义下拉单选选择框功能
2018/10/12 Javascript
详解@angular/cli 改变默认启动端口两种方式
2018/11/29 Javascript
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
vue中根据时间戳判断对应的时间(今天 昨天 前天)
2019/12/20 Javascript
Node.js中文件系统fs模块的使用及常用接口
2020/03/06 Javascript
在Vue中创建可重用的 Transition的方法
2020/06/02 Javascript
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
python中将字典形式的数据循环插入Excel
2018/01/16 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
一年级评语大全
2014/04/23 职场文书
让生命充满爱演讲稿
2014/05/10 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
公司合作意向书范文
2014/07/30 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
房贷收入证明范本
2015/06/12 职场文书
国际贸易实训总结
2015/08/03 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
pytorch加载预训练模型与自己模型不匹配的解决方案
2021/05/13 Python
CSS3实现列表无限滚动/轮播效果
2021/06/23 HTML / CSS