目录表
在很多时候,你会想要让你的程序与用户(可能是你自己)交互。你会从用户那里得到输入,然后打印一些结果。我们可以分别使用
raw_input
和
print
语句来完成这些功能。对于输出,你也可以使用多种多样的
str
(字符串)类。例如,你能够使用
rjust
方法来得到一个按一定宽度右对齐的字符串。利用
help(str)
获得更多详情。
另一个常用的输入/输出类型是处理文件。创建、读和写文件的能力是许多程序所必需的,我们将会在这章探索如何实现这些功能。
Python rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串。
str.rjust(width[, fillchar])
width -- 指定填充指定字符后中字符串的总长度.
fillchar -- 填充的字符,默认为空格。
返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。如果指定的长度小于字符串的长度则返回原字符串
str = "AAAAA"
print str.rjust(50,"s")
文件
你可以通过创建一个file类的对象来打开一个文件,分别使用file类的read、readline或write方法来恰当地读写文件。对文件的读写能力依赖于你在打开文件时指定的模式。最后,当你完成对文件的操作的时候,你调用close方法来告诉Python我们完成了对文件的使用。
使用文件
例12.1 使用文件
#!/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
(源文件: code/using_file.py)
输出
$ python using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
use Python!
它如何工作
首先,我们通过指明我们希望打开的文件和模式来创建一个file类的实例。模式可以为
读模式(
'r'
)read、
写模式(
'w'
)write或
追加模式(
'a'
)append。事实上还有多得多的模式可以使用,你可以使用help(file)来了解它们的详情。
我们首先用写模式打开文件,然后使用file类的write方法来写文件,最后我们用close关闭这个文件。
接下来,我们再一次打开同一个文件来读文件。
如果我们没有指定模式,读模式会作为默认的模式。
在一个循环中,我们使用readline方法读文件的每一行。这个方法返回包括行末换行符的一个完整行。所以,当一个 空的 字符串被返回的时候,即表示文件末已经到达了,于是我们停止循环。
readline()
方法用于从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符。
注意,因为从文件读到的内容已经以换行符结尾,所以我们在print语句上使用逗号来消除自动换行。最后,我们用close关闭这个文件。
现在,来看一下
poem.txt
文件的内容来验证程序确实工作正常了。
储存器
Python提供一个标准的模块,称为
pickle。使用它你可以在一个文件中
储存
任何
Python对象,之后你又可以把它完整无缺地取出来。这被称为
持久地
储存对象。
存取结构化的数据。
还有另一个模块称为
cPickle,它的功能和pickle模块完全相同,只不过它是用
C语言编写的,因此要快得多(
比
pickle
快1000倍)。你可以使用它们中的任一个,而我们在这里将使用cPickle模块。记住,我们把这两个模块都简称为pickle模块。
储存与取储存
例12.2 储存与取储存
#!/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
(源文件: code/pickling.py)
输出
$ python pickling.py
['apple', 'mango', 'carrot']
它如何工作
首先,请注意我们使用了
import..as
语法。这是一种便利方法,以便于我们可以使用更短的模块名称。在这个例子中,它还让我们能够通过简单地改变一行就切换到另一个模块(cPickle或者pickle)!在程序的其余部分的时候,我们简单地把这个模块称为p。
为了在文件里储存一个对象,首先以写模式打开一个
file
对象,然后调用储存器模块的
dump
函数,把对象储存到打开的文件中。这个过程称为
储存
。
接下来,我们使用
pickle
模块的
load
函数的返回来取回对象。这个过程称为
取储存
。
概括
我们已经讨论了多种类型的输入/输出,及文件处理和使用储存器模块。
接下来,我们将探索异常的概念。