文件输入与输出之文件位置,,


  文件位置

  到目前为止,我们一直在处理与程序存储在相同位置上的文件,我们没有考虑如何查找文件,因为它与程序在同一个地方。

  这就像你在自己的房间里时,你不用担心找不到你的壁橱,它就在房间里。但是如果你在另一个房间、另一幢房子或在另一个城市里,要找到壁橱就复杂多了!

  与孩子一起学编程-python教程

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

  

    在Windows中,每个存储介质由一个字母表示,如C代表硬盘,E对应一个闪存盘。在Mac OSX和Linux上,每个存储介质都有一个名字(例如,had或FLASH DRIVE )。每个存储单独可以划分为多个文件夹,如Music、Pictures和Programs。如果查看文件浏览器(如Windows Explorer),就像下图这样:

  与孩子一起学编程-python教程

  

  文件夹中还可以有鞭他文件夹,这些文件夹本身又可以包含另外的文件夹,依此类推,下面这个例子包含了3层文件夹:

  第一层是Music,下一层包含New Music和Old Music,再下一层包含Kind of old music 和Really old music 。

  与孩子一起学编程-python教程

  术语箱

  位于其他文件夹中的文件夹称为子文件夹(subfolder)。如果使用术语“目录”来描述,可以把它们称为子目录(subdirectory)。

  在Windows Explorer(或其他文件浏览器)中查找文件或文件夹时,文件夹就像一棵树的分支。“根”是驱动器本身,如C:或E:。每个主文件夹就像树干,各个主文件夹中的文件夹则像小树枝,依此类推。

  不过,从程序访问文件时,这种树型想法就不适用了。你的程序不能点击文件夹,不能通过浏览整棵树来查找某个文件,它需要一种更直接的方法来查找文件。好在还有另外一种方法可以表示树结构。点击不同文件夹和子文件夹时,如果你查看Windows Explorer的地址栏,你会看到这样的地址:

  与孩子一起学编程-python教程

  这称为路径(path),描述了文件在文件夹结构中的位置。

  这个特定的路径表达的意思如下:

  从e:盘开始

  进入名为Music的文件夹

  在Music文件夹中,进入一个名为Old Music的子文件夹

  在Old Music子文件夹中,进入下一层一个名为Really old music的子文件夹

  在Really old music 子文件夹中,有一个名为my_song.mp3的文件。

  可以使用类似这样的路径找到计算机的任何文件,程序就是利用这种方法来查找和打开文件的,下面是一个例子:

  与孩子一起学编程-python教程

  使用文件的完全路径名总能找到文件。完全路径名包含从根(驱动器,如C:)开始这个路径上的所有文件夹名,这个例子中的文件名就是一个完全路径名。

  斜线还是反斜线

  斜线(和/)一定要正确使用,这很重要。Windows在路径名中可以接受斜线(/)也可以接受反斜线(),不过如果在Python程序中使用类似c:est_results.txt的路径,部分会带来问题,还记得吗?在第21章中,我们谈到过一些用于打印格式化的特殊字符,如表示制表符。正是因为这个原因,所以应当避免在文件路径中出现字符。Python(和Windows)会把看作是一个制表符,而不是像你预想的那样把它当作文件名的一部分,所以应当使用/。

  另一种选择是使用双反斜线,如下:

  与孩子一起学编程-python教程

  记住,如果希望打印一个符号,必须在它前面再放一个反斜线。在文件名中也是如此,不过我还是推荐使用/。

  有时并不需要完整的文件路径,下一节将讨论如何在“半路上”查找一个文件。

  看看你在哪里

  大多数操作系统(包括Windows)都有一个“工作目录”概念,有时也称为“当前工作目录”,这是文件夹树中你目前所在的目录。

  假设从根(c:)开始,沿着Program Files 分支向下移动到Hello World 分支,你的当前位置或当前目录就是c:Program Files /Hello World。

  与孩子一起学编程-python教程

  现在要找到文件beachball.png,必须沿examples分支向下,所以达到这个文件的路径就是/examples/beachball.png。由于你已经在这条种上走了一段,所以只需要走完剩下的一段就能到达你想去的地方。

  还记得吗?在第19章讲到关于声音的内容时,我们打开声音文件使用的是splat.wva之类的文件名,并没有使用路径。这是因为,那时我告诉你要把声音文件复制到保存程序的同一个文件夹中。如果在Windows Explorer中查看,就是这样:

  与孩子一起学编程-python教程

  注意,我把Python文件(扩展名为.py)与声音文件(扩展名为.wav)放在同一个文件夹中,运行Python程序时,它的工作目录就是存储.py文件的文件夹。

  如果把程序存储在e:/programs并运行,这个程序就会把e:/programs作为它的工作目录开始运行。如果有一个声音文件存储在同一个文件夹中,那么程序只需要它的文件名就可以打开这个声音文件。并不需要一个路径来找到这个文件,因为文件已经在当前位置了,所以可以直接这样写:

  与孩子一起学编程-python教程

  注意,我们不需要使用声音文件的完全路径名(它的完全路径名是e:/programs/splat.wav)。这里直接使用了文件名而没有带路径,因为这个文件与使用该文件的程序在同一个文件夹中。

  关于路径已经讲得够多了

  路径和文件位置就讲到这里,关于文件夹和目录、路径、工作目录等的话题让有的人感觉很迷糊,需要大量篇幅才能解释清楚,不过我们讨论的是编程,而不是操作系统、文件位置或路径,所以在这个方面遇到困难,可以让你的爸爸妈妈、老师或懂计算机的人来帮你。

  本书中所有其他使用文件的例子都会读写与程序在相同位置上的文件,所以我们不必担心路径或使用完整路径的问题。

评论关闭