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中List.index()方法的使用教程
May 20 Python
django实现同一个ip十分钟内只能注册一次的实例
Nov 03 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
对pandas数据判断是否为NaN值的方法详解
Nov 06 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
Python下简易的单例模式详解
Apr 08 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
Python实现线性判别分析(LDA)的MATLAB方式
Dec 09 Python
Pytorch 使用不同版本的cuda的方法步骤
Apr 02 Python
django 模版关闭转义方式
May 14 Python
pytorch判断是否cuda 判断变量类型方式
Jun 23 Python
python常量折叠基础知识点讲解
Feb 28 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
PHP 输出缓存详解
2009/06/20 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
php递归删除目录下的文件但保留的实例分享
2014/05/10 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
Python入门篇之对象类型
2014/10/17 Python
详解在Python和IPython中使用Docker
2015/04/28 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
Python+request+unittest实现接口测试框架集成实例
2018/03/16 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python文字转语音的实例代码分析
2019/11/12 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
python如何将两张图片生成为全景图片
2020/03/05 Python
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
自荐信要包含哪些内容
2013/11/06 职场文书
乡镇消防工作实施方案
2014/03/27 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
国际贸易求职信
2014/07/05 职场文书
2014年实习期工作总结
2014/11/27 职场文书
Nginx设置HTTPS的方法步骤 443证书配置方法
2022/03/21 Servers