# Python编程入门(6)

## 第七章 输入输出

### 7.1 输出格式控制

问题是：如何把值转换为字符串？

>>> 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/n'
>>> hellos = hello
>>> print hellos
'hello, world/012'
>>> # 反向引号内可以是一个序表
... 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



还有一个函数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



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



### 7.2 读写文件

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

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



#### 7.2.1 文件对象的方法

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


'This is the entire file./012'
''



>>> f.readline()
'This is the first line of the file./012'
'Second line of the file/012'
''



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


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

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



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

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



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



#### 7.2.2 pickle模块

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

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

pickle.dump(x, f)


x = pickle.load(f)


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

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

• 1
点赞
• 1
收藏
觉得还不错? 一键收藏
• 打赏
• 0
评论
01-10
06-17 8758
03-11 110
08-24 8699
03-08
12-18 3192
03-08 1303
09-29 329
09-30 314
09-26 347
09-29 174
09-26 269

### “相关推荐”对你有帮助么？

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

wwwunix

¥1 ¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、付费专栏及课程。