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

Python入门(7)

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

第七章 输入输出

  有几种办法可以从程序输出;数据可以用可读的形式显示,或保存到文件中以备日后使用。本章讨论一些输入输出的办法。

7.1 输出格式控制

  到现在为止我们已经看到了两种输出值的方法:表达式语句和print语句。(第三种方法是使用文件对象的write()方法,标准输出文件可以用sys.stdout引用。参见库参考手册)。

  我们常常需要控制输出格式,而不仅仅是显示空格分开的值。有两种办法控制输出格式:一种办法是自己进行字符串处理,用字符串的片断和合并操作可以产生任何可以想象的格式。标准模块string包含了诸如把字符串填充到指定的列宽这样的有用操作,后面会有提及。

  另一种办法是使用%运算符,此运算符以一个字符串为左运算元,它按C的sprintf()函数格式把右运算元转换为字符串,返回转换结果。

  问题是:如何把值转换为字符串?

  幸运的是,Python有一种办法可以把任何值转换为字符串:使用repr()函数,或把值写在两个反向引号(``)之间。例如:


>>> x = 10 * 3.14
>>> y = 200*200
>>> s = 'The value of x is ' + `x` + ', and y is ' + `y` + '...'
>>> print s
The value of x is 31.4, and y is 40000...
>>> # 反向引号也适用于非数值型
... p = [x, y]
>>> ps = repr(p)
>>> ps
'[31.4, 40000]'
>>> # 转换字符串对字符串加字符串引号和反斜杠
... hello = 'hello, world '
>>> hellos = `hello`
>>> print hellos
'hello, world12'
>>> # 反向引号内可以是一个序表
... `x, y, ('spam', 'eggs')`
"(31.4, 40000, ('spam', 'eggs'))"

  下面是两种写出平方、立方表的方法:


>>> import string
>>> for x in range(1, 11):
...     print string.rjust(`x`, 2), string.rjust(`x*x`, 3),
...     # 前一行的结尾逗号表示不换行
...     print string.rjust(`x*x*x`, 4)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000
>>> for x in range(1,11):
...     print'%2d %3d %4d' % (x, x*x, x*x*x)
... 
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

  注意print输出的各项之间额外加了一个空格,这是print的规定。 

  此例显示了函数string.rjust()的用法,此函数可以把一个字符串放进指定宽度右对齐,左边用空格填充。类似函数还有string.ljust()和string.center()。这些函数不向外输出,只是返回转换后的字符串。如果输入字符串太长也不会被截断而是被原样返回。这样的处理可能会使你的列对齐失效,但这可能比截断要好一些,截断的结果是我们看到一个错误的值。(如果你确实需要截断的话总可以再加一层片断,如string.ljust(x,n)[0:n])。

  还有一个函数string.zfill(),可以在数值左边填零。此函数可以处理带有加减号的情况:


>>> string.zfill('12', 5)
'00012'
>>> string.zfill('-3.14', 7)
'-003.14'
>>> string.zfill('3.14159265359', 5)
'3.14159265359'

  操作符的用法如下例:


>>> import math
>>> print 'The value of PI is approximately %5.3f.' % math.pi
The value of PI is approximately 3.142.

  如果有多个值可以用一个序表给出,这时格式字符串中要有多个格式,如:


>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> for name, phone in table.items():
...     print'%-10s ==> %10d' % (name, phone)
... 
Jack       ==>       4098
Dcab       ==>    8637678
Sjoerd     ==>       4127

  大多数格式与C用法相同,要求要输出的值的类型符合格式的需要。但是,如果你没有引发例外错误的话也不会产生内核堆列。Python的%s格式要宽得多:如果相应的输出项不是字符串对象,就先用str()内置函数把它变成字符串。在格式指定中宽度指定为*号表示后面的输出项中多出一个指定宽度的整数。C格式%n和%p未被支持。

  如果你有一个长格式串不想把它分开,可以在指定格式的地方指定名字,这样就不需要按次序去把格式和名字对应起来,这种格式为“%(变量名)格式”,例如:


>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print 'Jack: %(Jack)d; Sjoerd: %(Sjoerd)d;
Dcab: %(Dcab)d' % table
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

  这里输出项总是一个字典,字典的各项值是要输出的值,字典的键值是各值的名字。这种输出格式经常与内置函数var()配合使用,var()返回包含所有局部变量的字典。

7.2 读写文件

  open()打开一个文件对象,经常使用两个参数:“open(文件名,模式)”。例如:



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



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

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章