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编程中线程的创建与锁的使用
Feb 28 Python
Python装饰器基础详解
Mar 09 Python
python 文件操作api(文件操作函数)
Aug 28 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
django使用F方法更新一个对象多个对象字段的实现
Mar 28 Python
在python3.64中安装pyinstaller库的方法步骤
Jun 02 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python Django ORM连表正反操作技巧
Jun 13 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/03 冲泡冲煮
PHP根据session与cookie用户登录状态操作类的代码
2016/05/13 PHP
PHP反射学习入门示例
2019/06/14 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
jquery.combobox中文api和例子,修复了上面的小bug
2011/03/28 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
2015/08/24 Javascript
js 获取元素所有兄弟节点的实现方法
2016/09/06 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
详解vue-cli3使用
2018/08/14 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
基于JavaScript的数据结构队列动画实现示例解析
2020/08/06 Javascript
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
使用python实现BLAST
2018/02/12 Python
Django中使用Whoosh进行全文检索的方法
2019/03/31 Python
OpenCV 边缘检测
2019/07/10 Python
利用Python进行图像的加法,图像混合(附代码)
2019/07/14 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
Python利用socket模块开发简单的端口扫描工具的实现
2021/01/27 Python
廉价航班、机票和酒店:JustFly
2018/02/07 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
感恩之星事迹材料
2014/05/03 职场文书
推荐信模板
2014/05/09 职场文书
企业贷款委托书格式
2014/09/12 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python