首页 » 与孩子一起学编程 » 与孩子一起学编程全文在线阅读

《与孩子一起学编程》22.6 文本文件和二进制文件

关灯直达底部

到目前为止,打开文件和读取文本行的所有例子都有一个假设,认为文件中实际上都包含有文本。要记住,文件能够存储任何内容,文本只是其中的一种。程序员把所有其他类型的文件都统称为二进制文件(binary file)。

可以打开的文件主要有以下两种类型。

 
  • 文本文件:这些文件包含了文本,包括字母、数字、标点符号和一些特殊字符,如换行符。

  • 二进制文件:这些文件不包含文本,它们可能包含音乐、图片或其他类型的数据。不过由于不包含文本,所以这些文件中也没有行,因为根本不存在换行符。

这说明不能对二进制文件使用 readlinereadlines。例如,如果想要从一个 .wav 文件读取一“行”,你根本无法知道会得到些什么。大多数情况下,你可能会得出一大堆奇怪的东西,就像这样:

>>> f = open('splat.wav', 'r')>>> print f.readlineRIFFö?  WAVEfmt ?  ? ? "V  "V   datap?  ÇÇÇÇÇÇÇÇüÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ?ÇÇ?????Ç????ÇÇÇÇ??ÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ?Ç?ÇÇÇÇüÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇÇ?ÇÇÇÇÇüüÇÇÇ?ÇÇ?ÇÇÇÇ??ÇÇüéééÇzvvy{|Ç   âçïê}trv|äëïîèå~ut|?yrqrtxÇîÖ?æäàütvçÆÄ|mlfWR]jnmpxüêÅ   ºƒâràó«¼Ö}`ORj?{hZZgwàëy{äæá?¿ÿézåÿèmWLISjÇàzrvÇüytv~üÇ}yrifjt}äêèêëÄöÉémSCFZ   lrtyéïö¥ñ¬½?ñ¢ÆÄìÅôòÆÄÅæ|åÜ?¬ÿüpd/[email protected];99:>EJMW]YTZfuçòƒ?????????????¢ôë~{|{y   xzzuiZNGHLSbs?~wrnf/TPQU]`jvàæÉ?osÇïôæä}üàë??

.wav 文件最前面有一些东西看起来像是文本,不过后面就很莫名其妙了。这是因为 .wav 文件不包含文本,只包含声音。readlinereadlines 方法只能用于读取文本文件。

大多数情况下,如果需要使用二进制文件,就要通过 Pygame 或其他一些模块来加载文件,就像在第 19 章中一样。

pygame.mixer.music.load('bg_music.mp3')

那样就会由 Pygame 负责打开文件并读取二进制数据(在这个例子中,二进制数据就是音乐)。

这本书不打算介绍如何处理二进制文件。不过没准你想知道二进制是什么样子,可以为文件模式增加一个 b 来打开二进制文件,就像这样:

my_music_file = open('bg_music.mp3', 'rb')

这里的 'rb' 部分表示我们要打开文件并以二进制模式读取文件。

在前面几节中,我们已经了解了如何将信息从文件读入程序,这称为读文件。接下来我们要学习如何将程序的信息放入到文件中,这称为写文件。