电脑上的文件夹遍历函数os.walk(path)函数,是一切文件夹操作的基础。有了这个函数,全部文件夹与文件的操作就有了基础。本文要谈的是网盘上的文件夹遍历。考虑使用bypy工具搭建自己的网盘自动传输系统,需要对云文件夹进行遍历,如果建立同样的函数,将能为所有相关文件夹的文件的操作建立坚实的基础。
这个问题并不简单。因为文件夹具有循环特征。企图遍历完一个子文件夹再进入下一个子文件夹是困难的,因为遍历完子文件的操作就是遍历完全部文件夹的操作,它们在结构上是一致的。这引起了我对复杂程序结构分析的兴趣。
首先,要考虑突破这种陷阱。我考虑的是从第一层开始,到第二层,到第三层,一层一层遍历完文件夹,而非遍历完所有某个子文件夹的内容。
第二,构建循环体,这个循环体是对一个列表的操作,这个列表的文件夹进行操作,产生一系列的子文件夹,重新构成列表,把得到的新列表,赋给上一次被操作的那个列表用到的名字,就实现了循环。
第三,我们的操作基础是基于bypy本身提供的list函数,它会提供当前文件夹的子文件夹和文件信息,类似于os的listdir函数。不过它只能显示在shell中,所以要调用subprocess的runcmd函数,让运行结果写入文本文件,再通过文本文件的读写传递信息解决这个问题。
第四,对循环体的分析表明,需要在一个一般性变量的位置,即位于n的层级,不能指定具体的层级,只能是变量n,往上回溯到初始文件夹,获得路径才能调用list函数产生子文件夹列表。这就要求我们改造针对单层文件夹的 list函数,使在当前的n层级的操作获得n-1级的文件夹的信息,从而能够回溯到起点。
第五,循环体在初始位置很难与一般情况共用同样的程序代码组,我们可以修改在第一次循环时的处理就是了。循环熔断的条件,可以观察到产生的子文件夹列表为空时就可以break了。
下面是草图分析。在用草图进行分析完之后,整个代码的编写出奇顺利。因此正确的程序编写是要进行草图分析的,慢慢推断研究它各部分应该具备的特征和规律,并分析实现这些功能需要的信息和信息的传递。程序本质上是一台复杂的精密的机器。程序延展了数学的运算范围,并以其自身的逻辑使我们获得明确的输入输出的规律。有些结果是偏离甚至是不可知的诡异的,它指向某种神秘的精神灵性的层面。这些正是它的魅力所在。
这是listwj.py