如果你想更持久地存储程序的信息,可以看着屏幕,把这些信息抄写在纸上。不过这样根本无法体现出计算机的作用!
比较好的做法是把信息保存在硬盘上,这样一来,即使程序不再运行(即计算机已经关机),你的数据仍然能保留下来,供以后使用。其实你早已经这么做了。每次保存学校作业、图片、歌曲或者 Python 程序时,实际上都是将它们存储到硬盘上。
从前的美好时光
在我们那个年代,只有纸!没有显示器、打印机,甚至没有键盘。要通过在卡片上打孔来“写”代码。然后把这叠卡片塞进一个大机器里,它会把这些打孔卡转换成计算机能够理解的电子信号。有时需要花几天时间才能得到一个答案。唉,可真是又费劲又麻烦!
老式计算机打孔卡
前面已经提到,在文件中添加内容有两种方法。
写——这表示开始新文件,或者覆盖现有的文件。
追加——这表示增加到现有的文件,保留原来已有的内容。
要写文件或追加文件,首先必须打开文件。像前面一样要使用 open
函数,只不过第二个参数有所不同。
要读文件,需要使用
/'r/'
作为文件模式:my_file = open(/'new_notes.txt/', /'r/')
要写文件,需要使用
/'w/'
作为文件模式:my_file = open(/'new_notes.txt/', /'w/')
要追加文件,需要使用
/'a/'
作为文件模式:my_file = open(/'notes.txt/', /'a/')
如果使用 /'a/'
表示追加模式,文件名必须是硬盘上某个已经存在的文件的名字,否则你会得到一条错误消息。这是因为,追加是指增加到一个现有的文件。
卡特又说对了!如果使用 /'w/'
表示写模式,会有两种可能:
如果文件已经存在,文件中的所有内容都会丢失,替换为现在写入的内容;
如果文件不存在,会创建一个同名的新文件,你写的所有内容会被放入这个新文件中。
下面来看一些例子。
追加到文件
首先,还是使用前面创建的 notes.txt 文件,为它追加一些内容。下面增加一行“Spend allowance”。完成 readlines
例子时如果你仔细观察,可能已经注意到最后一行末尾没有 n
,也就是说没有换行符。所以现在需要增加一个换行符,然后再增加我们的新字符串。要把字符串写入文件,需要使用 write
方法,如代码清单 22-3 所示。
代码清单 22-3 使用追加模式
读文件时,我们说过一旦完成就应当关闭文件。这一点在写文件时更为重要,写文件完成时一定要使用 close
。这是因为,只有使用 close
关闭文件,你所做的修改才会真正保存到文件中。
运行代码清单 22-3 中的程序之后,用“记事本”(或者任何其他文本编辑器)打开 notes.txt,看看里面的内容。记住,看完后一定要关闭“记事本”。
写文件
现在来看一个使用写模式来写文件的例子。我们将打开一个目前硬盘上还没有的文件。键入代码清单 22-4 中的程序,然后运行。
代码清单 22-4 对一个新文件使用写模式
new_file = open(/"my_new_notes.txt/", /'w/')new_file.write(/"Eat suppern/")new_file.write(/"Play soccern/")new_file.write(/"Go to bed/")new_file.close
怎么知道这个程序是否起作用呢?检查保存这个程序(代码清单 22-4)的文件夹,应该能看到一个名为 my_new_notes.txt 的文件。可以在“记事本”中打开这个文件,看看里面有什么。应该能看到:
Eat supperPlay soccerGo to bed
你利用这个程序创建了一个文本文件,并在这个文件中存储了一些文本。这个文件存放在硬盘上,只要硬盘没有坏,它就会一直在那里,除非你删除了它。这样一来我们就得到了一种方法,可以持久地存储程序的数据。现在你的程序就能在这个世界上(或者至少在你的硬盘上)留下永久的印记了。如果要在程序停止和计算机关机时保留一些信息,都可以放在文件中。
下面来看如果对硬盘上已有的一个文件使用写模式会发生什么。还记得那个 notes.txt 文件吗?如果运行过代码清单 22-3 中的程序,这个文件现在是这样的:
Wash the carMake my bedCollect allowanceSpend allowance
下面用写模式打开这个文件,并写入内容,看看会发生什么。代码清单 22-5 给出了相应的代码。
代码清单 22-5 对一个现有文件使用写模式
the_file = open(/'notes.txt/', /'w/')the_file.write(/"Wake upn/")the_file.write(/"Watch cartoons/")the_file.close
运行这个代码,然后在“记事本”中打开 notes.txt,看看其中包含什么内容。应该会看到:
Wake upWatch cartoons
notes.txt 原先的内容都不见了,已经被代码清单 22-5 程序中的新内容所取代。
使用 print
写文件
上一节中,我们使用了 write
来写文件,还可以用 print
写文件。仍然要以写模式或追加模式打开文件,不过打开文件后可以使用 print
写文件,就像这样:
my_file = open(/"new_file.txt/", /'w/')print >> my_file, /"Hello there, neighbor!/"my_file.close
这里的两个 > 符号(有时称为山形符号)告诉 print
要把它的输出发送到一个文件中而不是屏幕上。这称为重定向(redirecting)输出。
有时使用 print
比 write
更方便,因为 print
还会额外完成一些工作,比如把数字自动转换为字符串等。如果要在文件中放入文本,你可以使用 print
,也可以使用 write
。