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 XML 获取雅虎天气的实现方法
Feb 01 Python
Python实现的查询mysql数据库并通过邮件发送信息功能
May 17 Python
Python之用户输入的实例
Jun 22 Python
简单了解python gevent 协程使用及作用
Jul 22 Python
python 检查数据中是否有缺失值,删除缺失值的方式
Dec 02 Python
Python抓包程序mitmproxy安装和使用过程图解
Mar 02 Python
浅析python标准库中的glob
Mar 13 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
Jun 24 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
python定时截屏实现
Nov 02 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
python超详细实现完整学生成绩管理系统
Mar 17 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
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
用js实现in_array的方法
2013/11/05 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
javascript实现数字+字母验证码的简单实例
2014/02/10 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
js遍历json的key和value的实例
2017/01/22 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
轻量级JS Cookie插件js-cookie的使用方法
2018/03/22 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
jQuery子选择器与可见性选择器实例分析
2019/06/28 jQuery
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
用python实现批量重命名文件的代码
2012/05/25 Python
实例讲解python函数式编程
2014/06/09 Python
Python制作数据导入导出工具
2015/07/31 Python
Pycharm设置utf-8自动显示方法
2019/01/17 Python
浅谈python 中类属性共享的问题
2019/07/02 Python
如何更改 pandas dataframe 中两列的位置
2019/12/27 Python
Python requests模块cookie实例解析
2020/04/14 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
户外婚礼策划方案
2014/02/08 职场文书
土木工程专业本科生求职信
2014/10/01 职场文书
护士个人年终总结
2015/02/13 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
《百分数的认识》教学反思
2016/02/19 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python