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 相关文章推荐
Django框架下在视图中使用模版的方法
Jul 16 Python
Python数组定义方法
Apr 13 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
Python科学计算包numpy用法实例详解
Feb 08 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
python实现图像拼接功能
Mar 23 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
Python实现在线批量美颜功能过程解析
Jun 10 Python
浅析Python 多行匹配模式
Jul 24 Python
python中复数的共轭复数知识点总结
Dec 06 Python
浅谈Python协程asyncio
Jun 20 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
SONY SRF-M100的电路分析
2021/03/02 无线电
php strtotime 函数UNIX时间戳
2009/01/14 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
常用的javascript function代码
2008/05/23 Javascript
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
js新闻滚动 js如何实现新闻滚动效果
2013/01/07 Javascript
jquery用get实现ajax在ie里面刷新不进入后台解决方法
2013/08/12 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
详谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/25 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
JS实现图片旋转动画效果封装与使用示例
2018/07/09 Javascript
angula中使用iframe点击后不执行变更检测的问题
2020/05/10 Javascript
微信小程序scroll-view实现滚动到锚点左侧导航栏点餐功能(点击种类,滚动到锚点)
2020/06/11 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
win10下python2和python3共存问题解决方法
2019/12/23 Python
Python更换pip源方法过程解析
2020/05/19 Python
使用python创建Excel工作簿及工作表过程图解
2020/05/27 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
使用css3实现的tab选项卡代码分享
2014/12/09 HTML / CSS
林清轩官方网站:山茶花润肤油开创者
2016/10/26 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
社区工作者先进事迹
2014/01/18 职场文书
教师三严三实心得体会
2014/10/11 职场文书
农民工工资支付承诺书
2015/05/04 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle