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 相关文章推荐
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
python导入时小括号大作用
Jan 10 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
利用Python如何实现数据驱动的接口自动化测试
May 11 Python
python3.x实现发送邮件功能
May 22 Python
python基于SMTP协议发送邮件
May 31 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
Python 统计位数为偶数的数字代码详解
Mar 15 Python
使用Numpy对特征中的异常值进行替换及条件替换方式
Jun 08 Python
Python利用命名空间解析XML文档
Aug 10 Python
PyQt5结合matplotlib绘图的实现示例
Sep 15 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数据库编程之MySQL优化策略概述
2017/08/16 PHP
php学习笔记之mb_strstr的基本使用
2018/02/03 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
jquery动态改变div宽度和高度
2015/02/09 Javascript
JavaScript实现横线提示输入验证码随输入验证码输入消失的方法
2016/09/24 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
详解Node.js实现301、302重定向服务
2017/04/07 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
javascript 开发之网页兼容各种浏览器
2017/09/28 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
如何利用JavaScript编写更好的条件语句详解
2020/08/10 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
Python开发编码规范
2006/09/08 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
python实现支持目录FTP上传下载文件的方法
2015/06/03 Python
python中模块的__all__属性详解
2017/10/26 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
Python_查看sqlite3表结构,查询语句的示例代码
2019/07/17 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
解决Django响应JsonResponse返回json格式数据报错问题
2020/08/09 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
高一英语教学反思
2014/01/22 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
写给导师的自荐信
2015/03/06 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
小学课改工作总结
2015/08/13 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸
spring boot实现文件上传
2022/08/14 Java/Android