Rendering of reStructured text is not possible, please install Docutils.
:status: 草稿;ZoomQuiet; 90%

.. contents::
  :depth: 3


-4 PyDay 可用的首个脚本
===============================
**寻找吧!不要先想着创造--Python 是自足的**


现在的需求
--------------------
嗯嗯嗯! 小白根据曾经下载过的几个类似商业软件名称, 给自个儿的软件起个名字:  **CDCategory** -- 光盘分类库,简写 CDC

再确认当前的需求 ::

  1. 可以将光盘内容索引储存为硬盘上的文本文件
  2. 可以根据储存到硬盘上的光盘信息进行搜索


第一需求是将光盘信息读取为文本文件,因为小白痛恨DB;-)


文件是系统的事儿
----------------------------------------
现在首先的问题是 **如何读取指定目录/分区中的文件列表信息?** 

行者仅仅给了一点批示-- **文件是系统的事儿**


listdir()
``````````````````````````````````````````

系统 -- 操作系统 -- operating system -- `os模块`_

呜乎矣哉! 小白搜索了一大圈才弄明白,什么叫 **系统** , 而且找到了相应的 **模块**

在简明 Python 教程--第14章 Python标准库 -- `os模块`_ 中看到一句话 ::

  os.listdir()返回指定目录下的所有文件和目录名


看起来可以使用,所以,创建我们第一个执行脚本 **PyDay-4-1.py**  ::

  # coding : utf-8
  import os
  print os.listdir("/media/cdrom0")


解释:
  1. ``# coding : utf-8`` 应该作为八股文一样在每个周末头部声明,这是个忠告-- 为了解决中文兼容问题的忠告, 同时你应该选择支持 Unicode 编码的编辑器环境,保证在运行脚本中的每个汉字都是使用 utf-8 编码过的...详细参考...
  2. ``import os`` 就是告诉 Python 环境,我们要使用 `os模块`_ , 以此类推,如何你想使用任何己有的模块包,就使用 **import 模块名** 的形式引用就好
  3. 最后一行才是我们真正想作的事儿:"打印光盘根路径中的所有文件和目录"


脚本:
  - 因为Python程序不用编译,人写的程序文件,可以直接执行,就象话剧脚本一样,所以也称 Python 程序文件为 脚本
  - 在交互式命令行环境中,固然可以立即获得执行结果,但是我们尝试过程中的各种程序代码无法记忆下来,所以,事先写好脚本使用运行命令 ``python 脚本名.py`` 的形式就可以反复执行我们的所有代码行
  - 这是Python 丰富的运行形式之一,也是最常用的一种

运行结果类似:

截屏2-1 |snap_example1|

当然在 `iPython`_  环境下,逐步运行也一样

截屏2-2 |snap_exampleipy1|

以上截屏输出是使用 `Ubuntu`_ 6.06 安装光盘来测试的结果 [#]_ , 当然,小白使用进一步的目录时, ``os.listdir()`` 的确可以报告指定目录的所有信息,但是,问题是如何自动的将整个光盘的所有文件和目录信息都 **一次性扫描** 出来?

当然自个儿写一个也是可以的,不过是根据每级目录的信息,再次不断调用 ``os.listdir()`` 将所有层次的目录信息都逐一汇报出来而已,但是!值得嘛?

小白的热情是非常容易被想起来麻烦的事儿击碎的...于是热心的无所不能的行者又说了句 :"** 使用walk() **"


walk !
``````````````````````````````````````````

又一阵乱搜, 发现居然有个单独的模块 `os.path`_ 就是进行文件路径处理的!

等等! 一通E文后::

  Note: The newer os.walk() generator supplies similar functionality and can be easier to use.

好象在我们的环境中有两个 ``walk()`` -- ``os.path.walk()`` 以及 ``os.walk()`` ,后一个更加新以及好用?

按照 `os-file-dir`_ 的示例改造脚本尝试:




-4 PyDay小结
===============================


练习
--------------------


.. os模块:http://www.woodpecker.org.cn:9081/doc/abyteofpython_cn/chinese/ch14s03.html
.. iPython:http://ipython.scipy.org/moin/
.. Ubuntu:http://www.ubuntu.org.cn/
.. os.path:http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/python/lib/module-os.path.html
.. os-file-dir:http://aspn.activestate.com/ASPN/docs/ActivePython/2.4/python/lib/os-file-dir.html


.. |snap_example1| image:: snap_example1.png
.. |snap_exampleipy1| image:: snap_exampleipy1.png

.. [#] 笔者使用 Ubuntu 系统, 是种GNU/Linux 系统,对于文件系统的使用和广大小白们使用 Windows 系统稍有不同,
  没有分区的概念,光盘一般会自动统一的挂接到 ``/media/cdrom0`` 目录,
  小白们,当然可以自由的使用 "G:\" 等等类似的盘符进行替换,放心 Python 足够聪明,她是跨平台的





.. macro:: [[PageComment2(nosmiley=1, notify=1)]]


.. macro:: -- ZoomQuiet [[[DateTime(2007-02-20T07:11:54Z)]]]