输入和输出
这将会是解决你的项目与用户交互的办法。例如,你想要从用户处得到输入,然后打印其中的一些结果。我们可以通过分别通过 input() 函数和 print 函数来实现。
对于输出,我们也可以使用 str 类中的方法。例如,你可以使用 rjust 方法得到一个右对齐、有明确宽度的字符串。可以通过 help(str) 来查看更详细的信息。
输入/输出另一个常用的方式就是处理文件。创建、读取、写入文件的能力对于很多程序来说都很重要,我们会在这章探索这个特性。
用户输入
以 io_input.py 保存这个项目:
输出:
它是如何工作的
我们使用切片特性来反转文本。我们已经知道了如何通过 seq[a:b] 来得到位置 a 到位置 b序列切片。我们也可以提供第三个参数来决定切片的 步长 。默认的步长是 1 ,因为这样会返回文本连续的部分。给一个负值的步长,即 -1 ,会返回文本的反转。
我们得到文本并反转它。如果原始文本和反转文本相等,那么这个文本就是一个 回文。
小练习
对英文来说检查一段文字是不是回文,需要忽略标点、空格和大小写。例如:"Rise to vote, sir." 是一句回文,但目前版本的程序还不能认出它。你能够修改程序让它能认出这句回文吗?
如果你需要提示,可以参考这里的想法...
文件
你可以创建一个 file 类的对象来打开文件以供读写,使用 read, readline 或 write 中的恰当方法可以读取或写入文件。对文件的读写能力取决于你打开文件时选择的模式。当你处理完文件后,你可以使用 close 方法告诉 Python 你已经使用完文件了。
示例(另存为 io_using_file.py):
输出:
代码是如何工作的?
通过 open 方法我们很容易就能创建新的文件对象。我们指定文件名和打开方式,通过内置的 open 函数打开文件,当文件不存在时则创建文件。文件有很多种打开模式,可以是:读模式('r'),写模式('w')或追加模式('a')。我们也可以指定以什么方式进行读、写和追加,是文本模式('t')还是二进制模式('b')。还有很多打开模式的组合,你可以通过 help(open) 命令来查看详细的说明。默认情况下 open() 认为文件以文本模式打开进行读取操作。
在我们的例子里,第一次我们用 write 方法读取/创建了这个文件,并把字符串变量写入文件里,之后我们用 close 关闭了文件。
接下来我们再次打开同一个文件用于读取。我们不需要指定模式,因为默认的读取文件模式已经足够了。我们在主循环中通过 readline 方法读取文件中的每一行。这个方法每次会返回包括换行符在内的一整行。当读到 空 字符时,就说明已经到了文件的结尾,我们就可以跳出主循环了。
最后,我们用 close 关闭了文件。
从 readline 的输出中我们可以得知:这个程序已经成功地把小诗写入了 poem.txt 文件,并可以从中读取出来,打印到屏幕上。
Pickle
Python 提供了一个标准模块 pickle,你可以使用该模块将任何简单的 Python 对象存储在文件中,然后可再次取回。这个过程也被称为持久化存储对象。
示例 (另存为 io_pickle.py ):
输出结果:
怎样运行的
要将对象存储在文件中,必须先以二进制写入模式 open 文件,然后调用 pickle 模块的 dump 函数将对象保存到文件 file 中去,这个过程叫做 pickling。
之后,我们可使用 pickle 模块的 load 函数来检索对象并返回。此过程称为 unpickling 。
Unicode
到目前为止,当我们编写和使用字符串或者读取和写入文件时,我们只使用了简单的英文字符。 英语和非英语字符都可以用 Unicode 码表示(请参阅本节末尾的文章了解更多信息),默认情况下 Python 3 使用 Unicode 存储字符串变量(想想所有我们用单或双或三重引号包裹的文本引号)。
注意:如果你使用的是 Python 2 ,并且我们希望能够读取和编写其他非英语语言,我们需要使用 unicode 类型,所有内容都以字符 u 开头,例如:u"hello world" 。
当数据通过网络发送时,我们需要以字节为单位发送数据......这是计算机易于理解的方式。 将 Unicode 码(这是 Python 在存储字符串时使用的)转换为字节的规则称为编码。 一种流行的编码方式是 UTF-8 。 我们可以通过在 open 函数中使用一个简单的关键字参数来读写 UTF-8 。
工作原理
我们使用 io.open 然后在第一个 open 语句中使用 encoding 参数对信息进行编码,然后在解码信息时再在第二个 open 语句中使用该参数。 请注意,我们应该只在文本模式下使用 open 语句时的使用编码。
每当我们编写一个使用Unicode文字的程序(通过在字符串之前放置一个 u )就像我们上面使用的那样,我们必须确保 Python 本身被告知我们的程序使用UTF-8,我们必须把 # encoding=utf-8 注释在我们程序的顶部。
小结
我们已经讨论了各种类型的输入/输出操作,包括:文件处理、pickle 模块和 Unicode。