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 相关文章推荐
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
May 29 Python
利用Python查看目录中的文件示例详解
Aug 28 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
Python3实现转换Image图片格式
Jun 21 Python
python for循环remove同一个list过程解析
Aug 14 Python
python SocketServer源码深入解读
Sep 17 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Python2与Python3的区别点整理
Dec 12 Python
python关闭占用端口方式
Dec 17 Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 Python
python等待10秒执行下一命令的方法
Jul 19 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 strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP下通过系统信号量加锁方式获取递增序列ID
2009/09/25 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
php类自动加载器实现方法
2015/07/28 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
JS Timing
2007/04/21 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
手机端页面rem宽度自适应脚本
2015/05/20 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
基于jquery实现智能表单验证操作
2016/05/09 Javascript
react-router4 嵌套路由的使用方法
2017/07/24 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
vue 解决文本框被键盘遮住的问题
2019/11/06 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[03:34]2014DOTA2西雅图国际邀请赛 淘汰赛7月15日TOPPLAY
2014/07/15 DOTA
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
python3中函数参数的四种简单用法
2018/07/09 Python
python进阶之自定义可迭代的类
2019/08/20 Python
python解释器spython使用及原理解析
2019/08/24 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
prAna官网:瑜伽、旅行和冒险服装
2019/03/10 全球购物
农村文化建设标语
2014/10/07 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
表扬通报怎么写
2015/01/16 职场文书
工商局调档介绍信
2015/10/22 职场文书
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技
Python创建SQL数据库流程逐步讲解
2022/09/23 Python