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中ConfigParse模块的用法
Sep 29 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
复习Python中的字符串知识点
Apr 14 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
python subprocess 杀掉全部派生的子进程方法
Jan 16 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
django之跨表查询及添加记录的示例代码
Oct 16 Python
django settings.py 配置文件及介绍
Jul 15 Python
python装饰器原理与用法深入详解
Dec 19 Python
Python设计密码强度校验程序
Jul 30 Python
python3 hdf5文件 遍历代码
May 19 Python
Elasticsearch 聚合查询和排序
Apr 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解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
JQuery 遮罩层实现(mask)实现代码
2010/01/09 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
2014/11/20 NodeJs
Javascript快速排序算法详解
2014/12/03 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
2016/12/08 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
vue中使用echarts的示例
2021/01/03 Vue.js
[03:10]2014DOTA2 TI马来劲旅Titan首战告捷目标只是8强
2014/07/10 DOTA
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
在win和Linux系统中python命令行运行的不同
2016/07/03 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python 解析简单的XML数据
2020/07/24 Python
利用html5 file api读取本地文件示例(如图片、PDF等)
2018/03/07 HTML / CSS
CLR与IL分别是什么含义
2016/08/23 面试题
大学活动邀请函
2014/01/28 职场文书
职工年度考核评语
2014/12/31 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
失恋33天观后感
2015/06/11 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
多表查询、事务、DCL
2021/04/05 MySQL
vue组件的路由高亮问题解决方法
2021/05/11 Vue.js
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python