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实现LRU算法的2种方法
Jun 24 Python
Python增量循环删除MySQL表数据的方法
Sep 23 Python
HTML中使用python屏蔽一些基本功能的方法
Jul 07 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
Python查找文件中包含中文的行方法
Dec 19 Python
python爬虫获取百度首页内容教学
Dec 23 Python
python实现AES加密与解密
Mar 28 Python
python图片指定区域替换img.paste函数的使用
Apr 09 Python
python3.8.3安装教程及环境配置的详细教程(64-bit)
Nov 28 Python
Python 转移文件至云对象存储的方法
Feb 07 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 Python
Python的三个重要函数详解
Jan 18 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中Session的概念
2006/10/09 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
实例讲解php将字符串输出到HTML
2019/01/27 PHP
PHP PDOStatement::setAttribute讲解
2019/02/01 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
window.requestAnimationFrame是什么意思,怎么用
2013/01/13 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
js代码实现的加入收藏效果并兼容主流浏览器
2014/06/23 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
JS实现动态生成html table表格的方法分析
2018/07/11 Javascript
JavaScript常用事件介绍
2019/01/21 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python+django加载静态网页模板解析
2017/12/12 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
Django migrations 默认目录修改的方法教程
2018/09/28 Python
python 的topk算法实例
2020/04/02 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
python爬虫scrapy框架之增量式爬虫的示例代码
2021/02/26 Python
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
美国女士内衣在线折扣商店:One Hanes Place
2019/03/24 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
家庭教育先进个人事迹材料
2014/01/24 职场文书
疾病防治方案
2014/05/31 职场文书
教师思想工作总结2015
2015/05/13 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
css3中2D转换之有趣的transform形变效果
2022/02/24 HTML / CSS
利用Apache Common将java对象池化的问题
2022/06/16 Servers