Python 文件和输入输出小结


Posted in Python onOctober 09, 2013

1.打开和关闭文件(open(),file(),close())

有两种内建函数可以获取文件对象:open和file。他们的用法完全一样。下面只以open()为例子讲解。获取一个文件对象(打开文件)的语法如下:       

fileObj = open(filename,access_mode='r',buffering=-1) 

filename不用说你也应该知道是你要打开文件的路径。
access_mode用来标识文件打开的模式,默认为r(只读)。

常用的模式如下表所示:

文件模式 解释
r 以只读方式打开
w 以写方式打开,文件不为空时清空文件;文件不存在时新建文件。
a 追加模式,没有则创建
r+,w+,a+ 以读写模式打开,参见w,a

另外还有一个b表示二进制模式访问,但是对于Linux或者unix系统来说这个模式没有任何意义,因为他们把所有文件都看作二进制文件,包括文本文件。

第三个参数不经常用到,标识访问文件的缓冲方式,0代表不缓冲,1代表缓
冲一行,-1代表使用系统默认缓冲方式。只要使用系统默认就好。

一些例子:

>>> f = open('/etc/passwd','r')
>>> f1 = open('/etc/test','w')

使用完文件后,一定要记得关闭文件,操作如下:

>>> f.close()

2.文件读入

2.1.file.read(size = -1)
    读取从当前文件游标起size个字节的文件内容。如果size=-1,则读取所有剩余字节。

>>> f = open('/etc/passwd')
>>> f.read(100)
'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nol'

2.2.file.readlines(size=-1)

    从文件中读取并返回一行(包括行结束符),或返回最大size个字符

>>> f.readline()
'ogin\n'#和上面一个例子输出的最后拼起来就是  'nologin',因为游标在l后面。
>>> f.readline(1)
'a'

2.3.file.readlines(sizhint=0)
    读取文件所有的行,并作为一个列表返回(包括行结束符),如果sizhint>0则返回总和大约sizhint字节的行(具体由缓冲区大小决定)。

f.readlines()
['dm:x:3:4:adm:/var/adm:/sbin/nologin\n', 'lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\n', 'sync:x:5:0:sync:/sbin:/bin/sync\n', 'shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\n', 'halt:x:7:0:halt:/sbin:/sbin/halt\n', 'mail:x:8:12:mail:/var/spool/mail:/sbin/nologin\n', ......

输出省略。

3.文件输出

3.1.file.write(str)
    向文件中写入指定的字符串。

>>> f = file('/root/test.py','w+')
>>> f.write("print 'hello,world'")
>>> f.read()
''
>>> f.close()
>>> file('/root/test.py','r').read()
"print 'hello,world'"

3.2.file.write(seq)

    向文件写入字符串序列seq。seq是任何返回字符串的可迭代对象。

>>> f = file('/root/test.py','a+')
>>> codelst = ['\n','import os\n',"os.popen('ls').read()\n"]
>>> f.writelines(codelst)
>>> f.close()
>>> file('/root/test.py','r').read()
"print 'hello,world'\nimport os\nos.popen('ls').read()\n"

注意,文件写入的时候,不会自动加上换行符,必须手动加上。

4.文件移动

    学过C语言的同学,一定对fseek()函数不陌生,在Python中,seek()方法是fseek()的替代者。

    seek(offset,whence=0)
    方法可以将文件游标移动到文件的任意位置。其中offset代表需要移动的偏移字节数,whence表示要从哪个位置开始偏移:
    0代表从文件开头开始算起,
    1代表从当前位置开始算起,
    2代表从文件末尾算起。

    那我们如何知道当前文件游标在哪里呢?别担心,这里有个tell()方法可以返回当前文件游标的位置。

5.文件迭代

    在Python中,文件不仅仅是一个对象,而且是一个可迭代对象!我们可以利用如下迭代方式,轻松的访问和处理文件内容,而不必全部读出(readlines)后再迭代(性能上差了很多哦!)

for eachline in f:
    #dealwith eachline of f

例如:

>>> for eachline in f:
...     print eachline

6.os、os.path与文件

os和os.path中提供了一些跟文件有关的接口,下面介绍一些常用的接口。其他接口可以自己查阅相关文档。

注意:以下函数传入的参数都是字符串形式的文件名字,文件名可由文件对象的name属性获得。

函数 描述
os.path.basename() 去掉目录路径,返回文件名
os.path.dirname() 去掉文件名,返回目录路径
os.path.getatime()os.path.getctime()os.path.getmtime()os.path.size() 返回文件的atime,ctime,mtime和大小
os.path.exists() 该文件或目录是否存在
os.path.abs() 指定路径是否为绝对路径
os.path.isdir() 路径是否存在且为目录
os.path.isfile() 路径是否存在且为文件。
os.path.islink() 指定路径是否存在且为一个符号链接

>>> import os.path
>>> f = open('/root/test.py','r')
>>> os.path.basename(f.name)
'test.py'
>>> f.name
'/root/test.py'
>>> os.path.getsize(f.name)
52
>>> os.path.isabs(f.name)
True
>>> os.path.isdir(f.name)
False
Python 相关文章推荐
Python中利用原始套接字进行网络编程的示例
May 04 Python
django框架如何集成celery进行开发
May 24 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
在numpy矩阵中令小于0的元素改为0的实例
Jan 26 Python
Python之列表实现栈的工作功能
Jan 28 Python
pycharm配置pyqt5-tools开发环境的方法步骤
Feb 11 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
使用Python正则表达式操作文本数据的方法
May 14 Python
python中for循环把字符串或者字典添加到列表的方法
Jul 20 Python
pycharm双击无响应(打不开问题解决办法)
Jan 10 Python
pytest进阶教程之fixture函数详解
Mar 29 Python
Python 错误和异常小结
Oct 09 #Python
Python 命令行非阻塞输入的小例子
Sep 27 #Python
用Python脚本生成Android SALT扰码的方法
Sep 18 #Python
python pickle 和 shelve模块的用法
Sep 16 #Python
Python版的文曲星猜数字游戏代码
Sep 02 #Python
pytyon 带有重复的全排列
Aug 13 #Python
python不带重复的全排列代码
Aug 13 #Python
You might like
为什么那些咖啡爱好者大多看不上连锁咖啡店?
2021/03/06 咖啡文化
php数组函数序列之each() - 获取数组当前内部指针所指向元素的键名和键值,并将指针移到下一位
2011/10/31 PHP
php函数serialize()与unserialize()用法实例
2014/11/06 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
JQuery插件Quicksand实现超炫的动画洗牌效果
2015/05/03 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
监控Nodejs的性能实例代码
2019/07/02 NodeJs
Vue路由前后端设计总结
2019/08/06 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
TensorFlow打印tensor值的实现方法
2018/07/27 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
CSS3 3D立方体效果示例-transform也不过如此
2016/12/05 HTML / CSS
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述。
2015/11/09 面试题
Ejb技术面试题
2015/04/29 面试题
社区助残日活动总结
2014/08/29 职场文书
2014年教师节演讲稿
2014/09/03 职场文书
教书育人演讲稿
2014/09/11 职场文书
教师先进事迹材料
2014/12/16 职场文书
大学生党性分析材料
2014/12/19 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers