# 第七章 输入输出

## 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扩展模块的作者都留意使新增加的数据类型如矩阵可以正确地腌制和恢复。

• 本文已收录于以下专栏：

## Python编程：从入门到实践（课后习题6）

# 6-1 人 name = { 'first_name': 'lili', 'last_name': 'zhang', 'age': 18, 'city': 'guangzhou' }...
• z120379372
• 2017年09月19日 11:03
• 1267

## Python编程：从入门到实践（课后习题7）

# 7-1 汽车租 car = input("What kind of car do you want to rent: ") print("Let me see if I can find you ...
• z120379372
• 2017年09月19日 11:04
• 1313

## Python编程从入门到实践：习题6-1~6-3

• v490003181
• 2017年11月16日 21:48
• 321

## Python编程：从入门到实践的动手试一试答案（第六章）

#6-1 人 ergou = {'first_name':'qili','last_name':'yang','city':'beijing'} print(ergou['first_name']) ...
• weixin_39449570
• 2017年10月28日 23:26
• 264

## Python交互编程入门

• u014089183
• 2014年04月03日 06:43
• 1064

## 开始学习 Python编程 从入门到实践。

• xgdtxwd
• 2017年12月21日 15:35
• 152

## Python编程：从入门到实践（课后习题8）

# 8-1 消息 def display_message(): print("This chapter I will learning function.") display_message() ...
• z120379372
• 2017年09月19日 11:05
• 1848

## 《Python编程从入门到实践》学习笔记

• u013647951
• 2017年09月07日 13:51
• 874

## 《Python编程入门经典》笔记

2017/4/17 12:13:26 （一）编程基础和字符串 三引号 利用三引号可以输入多行文本，在输入结束三引号之前这些文本不会被处理。这种技术在不想将大量数据打印到一行以及想在代码中换行时非常...
• u012292754
• 2017年06月08日 21:38
• 252

## Python编程：从入门到实践读书笔记-4 操作列表

• 2017年03月21日 23:49
• 285

举报原因： 您举报文章：Python编程入门(6) 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)