本文针对第22章章末的习题提供参考答案。当然,有些习题的正确答案不止一个,特别是“动手试一试”,不过你可以通过这些答案来判断自己的思路是否正确。

第22章 文件的输入和输出

测试题

(1) Python用来处理文件的对象称为文件对象。

(2) open()函数可以用来创建文件对象,这是Python的内置函数之一。

(3) 文件名是在磁盘上(或闪存盘等其他存储介质)存储文件时使用的名字,文件对象则用于需要在Python中处理的文件。文件对象名与磁盘上的文件名无须相同。

(4) 当程序完成文件的读写操作时,应当关闭文件。

(5) 如果以追加模式打开文件,并在文件中添加内容,那么所添加的信息会增加(追加)到文件末尾。

(6) 如果以写模式打开文件,然后在文件中写入内容,那么文件中原有的内容都会丢失,并替换为新的数据。

(7) 要重置为从文件的起始位置开始读取,可以使用seek()方法,并传入参数0,如下所示。

myFile.seek(0)

(8) 在使用pickle模块把Python对象保存到文件中时,可以使用pickle.dump()方法,并指定希望保存的对象以及文件名作为参数,如下所示。

pickle.dump(myObject, "my_pickle_file.pkl")

(9) 要从pickle文件还原或获取对象,可以使用pickle.load()方法,并指定pickle文件作为参数,如下所示:

myObject = pickle.load("my_pickle_file.pkl")

记住,pickle文件必须用二进制模式('wb''rb')打开。

动手试一试

(1) 下面这个简单的程序可以造出一些滑稽句子:

import random
noun_file = open("nouns.txt", 'r')
nouns = noun_file.readline()
noun_list = nouns.split(',')
noun_file.close()
adj_file = open("adjectives.txt", 'r')
adjectives = adj_file.readline()
adj_list = adjectives.split(',')
adj_file.close()
verb_file = open("verbs.txt", 'r')
verbs = verb_file.readline()
verb_list = verbs.split(',')
verb_file.close()
adverb_file = open("adverbs.txt", 'r')
adverbs = adverb_file.readline()
adverb_list = adverbs.split(',')
adverb_file.close()
noun = random.choice(noun_list)
adj = random.choice(adj_list)
verb = random.choice(verb_list)
adverb = random.choice(adverb_list)
print("The", adj, noun, verb, adverb + '.')

这里的单词文件应当是用逗号分隔的单词列表。

(2) 下面的程序会把一些个人数据保存在一个文本文件中。

name = input("Enter your name: ")
age = input("Enter your age: ")
color = input("Enter your favorite color: ")
food = input("Enter your favorite food: ")
my_data = open("my_data_file.txt", 'w')
my_data.write(name + "\n")
my_data.write(age + "\n")
my_data.write(color + "\n")
my_data.write(food)
my_data.close()

(3) 下面的程序使用pickle模块保存一些数据。

import pickle
name = input("Enter your name: ")
age = input("Enter your age: ")
color = input("Enter your favorite color: ")
food = input("Enter your favorite food: ")
my_list = [name, age, color, food]
pickle_file = open("my_pickle_file.pkl", 'wb')
pickle.dump(my_list, pickle_file)
pickle_file.close()