导航
导航
文章目录
  1. 12.1 文件
    1. 使用文件
    2. 输出
    3. 如何工作
  2. 12.2 储存器
    1. 储存与取储存
    2. 输出
    3. 如何工作

简明Python教程-12.输入/输出

程序与用户交互时,可以使用raw_input和print语句,来完成获取输入和打印功能
对于输出,可以使用多种多样的str(字符串)类,如可以使用rjust方法来得到按一定宽度右对齐的字符串(可查看help(str))
另一个常用的输入/输出类型是处理文件。创建、读、写文件,是许多程序必须的能力

12.1 文件

可以通过创建一个file类的对象来打开一个文件
分别使用file类的read、readline或write方法,并指定文件的打开模式,来恰当地读写文件
完成对文件的操作的时候,调用close方法来告诉Python完成了对文件的使用

使用文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python
# Filename: using_file.py

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
'''

f = file('poem.txt', 'w') # open for 'w'riting
f.write(poem) # write text to file
f.close() # close the file

f = file('poem.txt')
# if no mode is specified, 'r'ead mode is assumed by default
while True:
line = f.readline()
if len(line) == 0: # Zero length indicates EOF
break
print line,
# Notice comma to avoid automatic newline added by Python
f.close() # close the file

输出

1
2
3
4
5
$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!

如何工作

通过指明文件和模式,来创建一个file类的实例
模式包括:读模式(r)、写模式(w)、追加模式(a),其他模式可参见help(file)
用写模式打开文件,使用file类的write方法写入,最后close关闭文件
然后再次打开它来读文件,如果不指定模式,则默认为读模式
在循环中,使用readline方法读文件的每一行,返回包括行末换行符的一个完整航,当返回一个空的字符串时,表示已经到达文件末,停止循环
从文件读到的内容已经包含了换行符,所以在print语句中,使用逗号来消除打印的自动换行,最后close关闭文件

12.2 储存器

Python提供一个标准模块pickle,可以在文件中储存任何Python对象,再把它完整无缺地取出来,这被称为持久地储存对象
还有一个模块cPickle,功能和pickle完全相同,但用C语言编写,因此要快很多(比pickle快1000倍)
可以使用任何一个,下例使用cPickle模块(我们都简称为pickle模块)

储存与取储存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python
# Filename: pickling.py

import cPickle as p
#import pickle as p

shoplistfile = 'shoplist.data'
# the name of the file where we will store the object

shoplist = ['apple', 'mango', 'carrot']

# Write to the file
f = file(shoplistfile, 'w')
p.dump(shoplist, f) # dump the object to a file
f.close()

del shoplist # remove the shoplist

# Read back from the storage
f = file(shoplistfile)
storedlist = p.load(f)
print storedlist

输出

1
2
$ python pickling.py
['apple', 'mango', 'carrot']

如何工作

import..as语法让我们可以使用更短的模块名称
在本例中,只要改变一行,就可以切换到另一个模块(cPickle或者pickle),在程序中简单地把这个模块称为p
首先以写模式打开一个file对象,然后调用储存器模块的dump函数,把对象储存到打开的文件中,这称为储存
pickle模块的load函数,返回对象,这个过程称为取储存