Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

Python入门(7)

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

>>> f=open('/tmp/workfile', 'w')
>>> print f
<open file '/tmp/workfile', mode 'w' at 80a0960>

  第一自变量是一个包含了文件名的字符串,第二自变量是文件打开方式的字符串。模式‘r ’表示读取,‘w’表示只写(已有的同名文件被清除),‘a’表示打开文件在尾部添加, ‘r+’表示打开文件既可以读也可以写。打开方式参数可选,缺省为‘r’模式。

  在Windows和Macintosh中在模式中加入‘b’表示以二进制格式打开文件,如‘rb’、‘wb ’、‘r+b’。Windows对文本文件和二进制文件有不同的处理,文本文件中的换行字符在读写时有变化。这种对文件数据的幕后的修改不影响ASCII文本文件,但是会破坏二进制数据如JPEG 或“.EXE”文件的数据。读写这样的文件一定要使用二进制格式。(Macintosh中文本模式的精确描述依赖于使用的C库)。

7.2.1 文件对象的方法

  本节后面的例子假设已经建立了一个名为f的文件对象。

  为了读取文件内容,调用f.read(size),可以读入一定字节数的数据返回为一个字符串。size 是一个可选数值参数,省略size或size取负值时读入整个文件并返回为一个字符串;如果文件比你的机器内存大一倍,那是你的问题。指定了正的size的时候之多读入并返回size字节。如果读到了文件尾,f.read()返回一个空串("")。如:

 
>>> f.read()
'This is the entire file.12'
>>> f.read()
''

  f.readline()从文件中读入一行,返回的字符串中将包括结尾的一个换行符(),如果文件的最后一行没有换行符则由该行读入的字符串也没有结尾的换行符。这样,由readline() 返回的结果不会有歧义,读入结果为空串时一定是到了文件尾,读入一个' '时为空行。


>>> f.readline()
'This is the first line of the file.12'
>>> f.readline()
'Second line of the file12'
>>> f.readline()
''

  f.readlines()反复调用f.readline(),返回一个包含文件所有行的列表。


>>> f.readlines()
['This is the first line of the file.12', 'Second line of the file12']

  f.write(string)把string的内容写入到文件中,返回None。

 
>>> f.write('This is a test ')
 

  f.tell()返回文件对象的当前读写为止,按从文件开始的字节数算。为了改变读写位置,使用“f.seek(位移,从哪里)”。读写位置按一个参考点加上位移来计算,参考点用“从那里”参数指定,取0时从文件头开始算,取1时按当前位置算,取2时从文件尾算。缺省值是0 ,从文件开始算。


>>> f=open('/tmp/workfile', 'r+')
>>> f.write('0123456789abcdef')
>>> f.seek(5)     # 从文件头前进5个字节,到达第6个字符
>>> f.read(1)        
'5'
>>> f.seek(-3, 2) # 转到结尾前3个字符
>>> f.read(1)
'd'

  用外一个文件后调用f.close()关闭文件,释放打开文件所占用的系统资源。文件关闭后再使用此文件对象就无效了。


>>> f.close()
>>> f.read()
Traceback (innermost last):
  File "<stdin>", line 1, in ?
ValueError: I/O operation on closed file

  文件对象还有其它一些不太常用的方法,例如isatty()和truncate(),参见库参考手册。 

7.2.2 pickle模块

  字符串可以很容易地从文件读入或向文件写出。读入数值要麻烦一些,因为read()方法总是返回字符串,要把读入的字符串传给象string.atoi()这样的函数,把象‘123’这样的字符串转换为对应的整数值123。但是,当你想保存更复杂的数据类型如列表、字典或类实例时,读写就要复杂得多。

  Python的设计使程序员可以不必反复编写调试保存复杂数据类型的代码,它提供了一个叫做pickle的标准模块。这个令人惊异的模块可以把几乎任何Python对象转换为字符串表示,这个过程叫做腌制,从对象的字符串表示恢复对象叫做恢复。在腌制和反腌制之间,对象的字符串表示可以保存在文件或数据中,甚至于通过网络连接传送到远程计算机上。

  如果你有一个对象x,有一个可写的文件对象f,最简单的腌制对象的办法是下面一行代码:

pickle.dump(x, f)

  为了恢复对象,如果刚才的文件已打开用于读取,文件对象名仍为f,则:

x = pickle.load(f)

  (腌制和恢复还有其它用法,可以腌制多个对象,可以不把数据写入文件,详见库参考手册)。

  pickle是保存Python对象并被其它程序或同一程序以后再运行时调用的标准办法,这种做法的专用术语叫做“持久对象”。因为pickle使用广泛,许多Python扩展模块的作者都留意使新增加的数据类型如矩阵可以正确地腌制和恢复。




 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页 1 2下一页


上一篇:Python入门(6)   下一篇:Python入门(8)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
·Motorola微处理器bootloader分析与应用
·Fedora Core5 NFS服务器搭建过程介绍
·Linux系统:让内存不再泄漏的实用技巧
·新手看招 手把手教你安装VMware虚拟机
·“侵权事件” 红帽称微软企图干扰用户
·删除Linux后 如何找回Windows启动菜单
·菜鸟乐园 Linux中常见文件系统格式介绍
·Linux操作系统下IPTables配置方法详解
·实用技巧 Linux系统的经典使用技巧八则
·Linux系统文件优化及磁盘检查方法介绍
推荐文章
·强大的轻量级网络入侵检测系统SNORT
·开放源代码怎么赚钱?
·ORACLE数据库入门
·如何修改登录画面?
·Redhat 9.0下让PHP支持Java类
·Linux系统文件命令精通指南(下)
·EJB和JSP, Servlet(一) EJB简介(
·标准建模语言UML及其支持环境(四)
精彩文章
·让Proftpd 的数据库模块支持MD5验证
·Linux技巧:bz2文件如何解压缩
·Java Servlet API说明文档(2.1a版
·Linux下新手装网卡指南
·我的Redhat8.0美化方案
·2.6内核的安装
·LINUX下声卡ALSA驱动安装方法
·Linux 网管 123 --- 第7章. 自订的
·给浮躁的软件业同仁(zhuan csdn)
·Linux架设DNS服务器之二
·Unix/Linux下的软件包生成器----EPM
·在Ubuntu上建立Arm Linux的开发环境
·[人物]KDE英雄(6):Lauri Watt
·网络协议与标准(上)
·WEB安全工具
·如何解决ftp连接过慢的方法
·一个使用getopt()函数获取命令行参
·Linux网络应用问答
·RedHat AS 3.0下高可用性集群配置
·如何进行增量备份?
·多一点不如少一点
·汉化你的RedHat全攻略(2)- TrueType
·嵌入式Linux发展 谈Montavista Linu
·Linux 指令篇:使用者管理--adduser
·将VB转化成PHP(英文)
·[显卡]一种通用的显卡驱动方法
Power by linux-cn.com 粤ICP备05006655号