Python编程中的文件读写及相关的文件对象方法讲解


Posted in Python onJanuary 19, 2016

python文件读写

python 进行文件读写的内建函数是open或file

file_hander(文件句柄或者叫做对象)= open(filename,mode)

mode:

模式    说明

r        只读

r+      读写

w       写入,先删除源文件,在重新写入,如果文件没有则创建

w+     读写,先删除源文件,在重新写入,如果文件没有则创建(可以写入写出)

读文件:

>>> fo = open("/root/a.txt")
>>> fo
<open file '/root/a.txt', mode 'r' at 0x7f5095dec4e0>
>>> fo.read()
'hello davehe\ni am emily\nemily emily\n'
>>> fo.close()
>>> fo.read()                     #对象已关闭,在读取就读不到
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
ValueError: I/O operation on closed file

 

>>> f1 = file("/root/a.txt")         
>>> f1.read()
'hello davehe\ni am emily\nemily emily\n'
>>> f1.close()

写文件:

root@10.1.6.200:~# ls -l new.txt
ls: cannot access new.txt: No such file or directory
>>> fnew = open("/root/new.txt",'w')  w参数文件没有则创建
>>> fnew.write('hello \n i am dave')

这时查看文件数据其实还只是在缓存区中,没有真正落到文件上.

root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#

只要我把文件关闭,数据会从缓存区写到文件里

>>> fnew.close()
root@10.1.6.200:~# cat new.txt
hello 
i am dave

再次使用w参数,文件会被清空,所以用该参数需要谨慎.

>>> fnew = open("/root/new.txt","w")
root@10.1.6.200:~# cat new.txt 
root@10.1.6.200:~#

mode使用r+参数:

>>> fnew = open("/root/new.txt",'r+')
>>> fnew.read()
'hello dave'
>>> fnew.write('i am dave')
>>> fnew.close()
root@10.1.6.200:~# cat new.txt
hello davei am dave

这次打开文件,直接写入,会发现ooo替换开头字母,因为上面读取操作使用了指针在写就写在后面.而这次是直接从头写入.

>>> fnew = open("/root/new.txt",'r+')
>>> fnew.write('ooo')
>>> fnew.close()
root@10.1.6.200:~# cat new.txt
ooolo davei am dave

文件对象方法
下面文件对象方法

  • FileObject.close()
  • String=FileObject.readline([size])
  • List = FileObject.readlines([size])
  • String = FileObject.read([size])   read:读取所有数据
  • FileObject.next()          
  • FileObject.write(string)
  • FileObject.writelines(List)
  • FlieObject.seek(偏移量,选项)
  • FlieObject.flush() 提交更新
>>> for i in open("/root/a.txt"):  用open可以返回迭代类型的变量,可以逐行读取数据
...   print i
...
hello davehe
i am emily
emily emily

FileObject.readline: 每次读取文件的一行,size是指每行每次读取size个字节,直到行的末尾,超出范围会读取空字符串

>>> f1 = open("/root/a.txt")
>>> f1.readline()
'hello davehe\n'
>>> f1.readline()
'i am emily\n'
>>> f1.readline()
'emily emily\n'
>>> f1.readline()
''
>>> f1.readline()
''
>>>f1.close()

 FileObject.readlines:返回一个列表

>>> f1 = open("/root/a.txt")
>>> f1.readlines()
['hello davehe\n', 'i am emily\n', 'emily emily\n']''

FileObject.next:返回当前行,并将文件指针到下一行,超出范围会给予警示,停止迭代.

>>> f1 = open("/root/a.txt")
>>> f1.next()
'hello davehe\n'
>>> f1.next()
'i am emily\n'
>>> f1.next()
'emily emily\n'
>>> f1.next()
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
StopIteration

FileObject.write:write和后面writelines在写入前会是否清除文件中原来所有的数据,在重新写入新的内容,取决于打开文件的模式.

FileObject.writelines(List):多行写,效率比write高,速度更快,少量写入可以使用write

>>> l = ["python\n","python\n","python\n"]
>>> f1 = open('/root/a.txt','a')
>>> f1.writelines(l)
>>> f1.close()
root@10.1.6.200:~# cat a.txt
hello davehe
i am emily
emily emily
python
python
python

FlieObject.seek(偏移量,选项):可以在文件中移动文件指针到不同的位置.

位置的默认值为0,代表从文件开头算起(即绝对偏移量),1代表从当前位置算起,2代表从文件末尾算起.

>>> f1 = open('/root/a.txt','r+')
>>> f1.read()
'hello davehe\ni am emily\nemily emily\npython\npython\npython\n'
>>> f1.seek(0,0)   指针指到开头,在读
>>> f1.read()
'hello davehe\ni am emily\nemily emily\npython\npython\npython\n'
>>> f1.read()
''
>>> f1.seek(0,0)
>>> f1.seek(0,2)   指针指到末尾,在读
>>> f1.read()
''

下面看个小实例,查找a.txt中emily出现几次

root@10.1.6.200:~# vim file.py
#!/usr/bin/env python
import re
f1 = open('/root/a.txt')
count = 0
for s in f1.readlines():
  li = re.findall("emily",s)
  if len(li) > 0:
    count = count + len(li)
print "this is have %d emily" % count 
f1.close()
root@10.1.6.200:~# cat a.txt
hello davehe
i am emily
emily emily
root@10.1.6.200:~# python file.py
this is have 3 emily
Python 相关文章推荐
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
Python中垃圾回收和del语句详解
Nov 15 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python无序链表删除重复项的方法
Jan 17 Python
Python turtle画图库&amp;&amp;画姓名实例
Jan 19 Python
python列表切片和嵌套列表取值操作详解
Feb 27 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
May 26 Python
如何在windows下安装配置python工具Ulipad
Oct 27 Python
Django数据库迁移常见使用方法
Nov 12 Python
Python使用os模块和fileinput模块来操作文件目录
Jan 19 #Python
举例讲解Python面相对象编程中对象的属性与类的方法
Jan 19 #Python
python结合API实现即时天气信息
Jan 19 #Python
Python+django实现文件下载
Jan 17 #Python
Python+django实现文件上传
Jan 17 #Python
初步剖析C语言编程中的结构体
Jan 16 #Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 #Python
You might like
Php Ctemplate引擎开发相关内容
2012/03/03 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
利用php下载xls文件(自己动手写的)
2014/04/18 PHP
php中解析带中文字符的url函数分享
2015/01/20 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
node.js实现多图片上传实例
2014/06/03 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
微信小程序tabBar模板用法实例分析【附demo源码下载】
2017/11/28 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
vue 解决遍历对象显示的顺序不对问题
2019/11/07 Javascript
[01:18]PWL开团时刻DAY10——一拳超人
2020/11/11 DOTA
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
python如何重载模块实例解析
2018/01/25 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Python IDE环境之 新版Pycharm安装详细教程
2020/03/05 Python
基于logstash实现日志文件同步elasticsearch
2020/08/06 Python
5分钟让你掌握css3阴影、倒影、渐变小技巧(小编推荐)
2016/08/15 HTML / CSS
浅谈Html5移动端ios/Android兼容性总结
2018/06/01 HTML / CSS
美国正宗设计师眼镜在线零售商:EYEZZ
2019/03/23 全球购物
mysql有关权限的表都有哪几个
2015/04/22 面试题
公司领导推荐信
2013/11/12 职场文书
高中班长自我鉴定
2013/12/20 职场文书
个人工作总结范文2014
2014/11/07 职场文书
材料员岗位职责
2015/02/10 职场文书
python3美化表格数据输出结果的实现代码
2021/04/14 Python
Python实现简繁体转换
2021/06/07 Python
python程序的组织结构详解
2021/12/06 Python