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框架下在URLconf中指定视图缓存的方法
Jul 23 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
python中利用Future对象回调别的函数示例代码
Sep 07 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
Python操作Oracle数据库的简单方法和封装类实例
May 07 Python
详解Matplotlib绘图之属性设置
Aug 23 Python
Python range、enumerate和zip函数用法详解
Sep 11 Python
基于python的selenium两种文件上传操作实现详解
Sep 19 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
解决Django Haystack全文检索为空的问题
May 19 Python
python算的上脚本语言吗
Jun 22 Python
python使用shell脚本创建kafka连接器
Apr 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
人族 Terran 基本策略
2020/03/14 星际争霸
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
PHP延迟静态绑定示例分享
2014/06/22 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php正则匹配文章中的远程图片地址并下载图片至本地
2015/09/29 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
利用javascript实现全部删或清空所选的操作
2014/05/27 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
Angular2自定义分页组件
2017/04/19 Javascript
浅谈angular4生命周期钩子
2017/09/05 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
用Vue.js方法创建模板并使用多个模板合成
2019/06/28 Javascript
微信小程序3D轮播实现代码
2019/09/19 Javascript
跟老齐学Python之正规地说一句话
2014/09/28 Python
python批量提取word内信息
2015/08/09 Python
Python实现简单求解给定整数的质因数算法示例
2018/03/25 Python
python多线程并发实例及其优化
2019/06/27 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
DC Shoes澳大利亚官方网上商店:购买DC鞋子
2019/10/25 全球购物
简述DNS进行域名解析的过程
2013/12/02 面试题
认识深刻的检讨书
2014/02/16 职场文书
医学生自我鉴定范文
2014/03/26 职场文书
财务审计整改报告
2014/11/06 职场文书
个人年终总结怎么写
2015/03/09 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js