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 相关文章推荐
Python2实现的LED大数字显示效果示例
Sep 04 Python
使用python装饰器计算函数运行时间的实例
Apr 21 Python
Python使用folium excel绘制point
Jan 03 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
Jun 05 Python
Django实现文件上传下载
Oct 06 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
Feb 15 Python
将keras的h5模型转换为tensorflow的pb模型操作
May 25 Python
keras多显卡训练方式
Jun 10 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
用Python实现职工信息管理系统
Dec 30 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可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
Git命令之分支详解
2021/03/02 PHP
js tab效果的实现代码
2009/12/26 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
js禁止回车提交表单的示例代码
2013/12/23 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
Vue-resource拦截器判断token失效跳转的实例
2017/10/27 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
nginx部署访问vue-cli搭建的项目的方法
2018/02/12 Javascript
webpack打包并将文件加载到指定的位置方法
2018/02/22 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
Python open读写文件实现脚本
2008/09/06 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
Python3实现从排序数组中删除重复项算法分析
2019/04/03 Python
使用Python中的reduce()函数求积的实例
2019/06/28 Python
keras .h5转移动端的.tflite文件实现方式
2020/05/25 Python
Python实现弹球小游戏
2020/08/01 Python
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
18岁生日感言
2014/01/12 职场文书
有关打架的检讨书
2014/01/25 职场文书
鼓励运动员的广播稿
2014/02/08 职场文书
供货协议书
2014/04/22 职场文书
名人演讲稿范文
2014/09/16 职场文书
新娘婚礼致辞
2015/07/27 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python