文件

计算机按二进制格式存储信息,二进制只使用 1 和 0。每个 1 或 0 称为一位(bit),8 位一组称为一个字节(byte)。文件是有名字的字节集合,存储在硬盘、CD、DVD、软盘、flash 盘或其他存储介质上。

文件可以存储很多不同类型的信息。一个文件可以包含文本、图片、音乐、计算机程序、电话号码表等内容。计算机硬盘上的所有内容都以文件的形式存储。程序就是由一个或多个文件构成的。

文件有以下属性:

  • ˆˆ名字
  • ˆˆ类型,表明文件中包含什么类型的数据(图片、音乐、文本)
  • 位置(文件存储在哪里)
  • ˆˆ大小(文件中有多少字节)

文件名

文件名中有一部分用来指示文件中包含什么类型的数据。文件名中通常至少有一个点(.),点后面的部分指出了文件的类型。这一部分称为扩展名(extension)。

文件位置

每个文件都要存储在某个地方,所以除了文件名外,每个文件还有自己的位置。硬盘和其他存储介质都组织为文件夹或目录。文件夹(folder)和目录(directorie)表示的是同一样东西,只是名字不同而已。它们是一种组织文件的方法。文件夹或目录组织和关联的方式称为文件夹结构或目录结构。

文件夹中还可以有其他文件夹,这些文件夹本身又可以包含另外的文件夹,依此类推。

打开文件

打开文件之前,需要知道你要对文件做些什么:

  • 如果你要使用这个文件作为输人(只查看文件中有什么,而不做任何改变),就是要打开文件完成读;
  • 如果要创建一个全新的文件或者用某个全新的文件替换现有的文件,就是要打开文件完成写;
  • 如果要为一个现有文件增加内容,就是要打开文件完成追加。
    1. #access_mode 可以是 'r', 'w', 'a', '+', 'b' 等
    2. handle = open(file_name, access_mode)
    3. do_something(handle)
    4. handle.close()

读文件

如果想打开一个文件完成读,但是这个文件根本不存在,你就会得到一条错误消息。

  1. with open(file_name, access_mode) as f:
  2. do_something(f)

逐行读取

readlines()方法会读取文件的所有行,直到文件末尾。如果你想一次只读取一行,可以使用readline()方法,如下:

  1. first_line = my_file.readline()

这只会读文件的第一行。如果再在同一个程序中使用 readline(),Python 会记住目前在什么位置。所以,第二次使用时,你会得到文件的第二行。

文本文件

文件能够存储任何内容,文本只是其中的一种。程序员把所有其他类型的文件都统称为二进制文件(binary file)。可以打开的文件主要有以下两种类型:

  1. 文本文件:这些文件包含了文本,包括字母、数字、标点符号和一些特殊字符,如换行符。
  2. 二进制文件:这些文件不包含文本,它们可能包含音乐、图片或其他类型的数据。不过由于不包含文本,所以这些文件中也没有行,因为根本不存在换行符。

二进制文件

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

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

写文件

如果你想更持久地存储程序的信息,比较好的做法是把信息保存在硬盘上,这样一来,即使程序不再运行(即计算机已经关机),你的数据仍然能保留下来,供以后使用。

在文件中添加内容有两种方法。

  1. 写:这表示开始新文件,或者覆盖现有的文件。
  2. 追加:这表示增加到现有的文件,保留原来已有的内容。

pickle

如果你想存储列表或对象实例之类的内容呢?可以把所有对象的属性都转换为字符串,再写到一个文本文件中,但是之后你还得把这个过程反过来,从文件恢复对象。这就复杂化了。

Python 提供了一种更简便的方法来存储列表和对象。这是一个 Python 模块,名为 pickle