for rt, dirs, files in os.walk(dir): 作用,input_images = np.array([[0]*784 for i in range(input_count

Python的os.walk()方法详细讲解


http://www.cnblogs.com/herbert/archive/2013/01/07/2848892.html   写的特别清楚的一篇

http://alanland.iteye.com/blog/612459





for rt, dirs, files in os.walk(dir): 作用,input_images = np.array([[0]*784 for i in range(input_count_第1张图片

我们可以看到,返回的是一个元组,元祖每一个元素即上面一行的内容,所以用for去遍历它。

然后对应的将这行的第一列的内容给root

                                  第二列 给dirs

                                 第三列 给files

元组每一个元素就是遍历一棵树(包括子树)         根的孩子(注意 不是子孙),如上图中蓝色框中的内容

[(根,孩子文件夹,孩子文件), 

(子根,孩子文件夹,孩子文件),

(子根,孩子文件夹,孩子文件),

(子根,孩子文件夹,孩子文件)]





应用:

1.遍历文件夹下的所有文件(为了方便,假设只有一层文件夹)


    
    
    
    
  1. for parent, dir_names, file_names in os.walk(person_dir):
  2. for file_name in file_names:
  3. print file_name


 
   

 
   
 
   

就可以遍历所有的file了

解析:os.walk(“/dir”)返回的结果是这样的

(  /dir,               [dir1,dir2……],                  [ file1,file2,…………….] ),

(  /dir/dir1 ,       [] ,                                    [file10,file12……]      ) ,  

(  /dir/dir2 ,       []                                      [file20,………..]        ) ,

…………………………..        

第一趟循环

parent 为:      /dir

dir_names为:[dir1,dir2,…..dirn],

file_names为:[file1,file2,……………] 

此时执行for file_name in file_names:

则内循环print出file1,file2………

即打印出根目录dir下所有文件

第二趟循环

parent 为:    /dir/dir1

dir_names为: [],

file_names为:[file10,file12……

此时执行

for file_name in file_names:
    
    
    
    


 
   

则内循环print出file10,file12………

即打印出dir2下的所有文件

第三趟循环……………….

2.那么如何读取所有文件夹名字呢?


    
    
    
    
  1. for parent, dir_names, file_names in os.walk(person_dir):
  2. for dir_name in dir_names:
  3. print dir_name



第一趟循环

parent 为/dir

dir_names为 [dir1,dir2,…..dirn],

file_names为[file1,file2,…………… ] 

此时执行

for dir_name in dir_names
    
    
    
    


则内循环print出dir1,dir2, dir3………

即打印出根目录dir下所有文件夹


第二趟循环

parent 为/dir/dir1

dir_names为 [],

file_names为[file10,file12……

此时执行

for file_name in file_names:
    
    
    
    


 
   

则内循环为空

第三趟循环内循环同样为空

剩下的内循环同样为空(见上述假设)

这样就打印出了所有文件夹

3.如果只想读取根目录下文件夹下的文件,不想读取根目录下的文件(假设根目录下的文件夹中没有文件夹,只有文件)


    
    
    
    
  1. for parent, dir_names, file_names in os.walk(dir):
  2. for dir_name in dir_names:
  3. for parent2, dir_names2, file_names2 in os.walk(dir+dir_name):
  4. for file_name in file_names2:


 
   


请自行体会



        
文章标签: python os.walk
上一篇java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解
下一篇Spring AOP三种配置详细介绍

**


**
下面是Python二维数组的定义:

   直接定义 a=[[1,1],[1,1]],这里定义了一个2*2的,且初始为0的二维数组。

   间接定义 a=[[0 for x in range(10)] for y in range(10)],这里定义了10*10初始为0的二维数组。

   后来,我在网上找到了更简单的字义二维数组的方法:

  b = [[0]*10]*10,定义10*10初始为0的Python二维数组。

  与a=[[0 for x in range(10)] for y in range(10)]比较:print a==b的结果为True。

   但用b的定义方法代替a后,以前的可以正常运行的程序也出错了,经过仔细分析得出区别:

   a[0][0]=1时,只有a[0][0]为1,其他全为0。

   b[0][0]=1时,b[0][0],b[1][0],直到 b[9,0] 全部为 1。由此得到大数组中的10个小的一维数据全是一个相同的引用,即指向同一地址。故 b = [[0]*10]*10 并不符合我们常规意义上的二维数组。

     同时经过试验:c=[0]*10的定义与c=[0 for x in range(10)]有同样的效果,而没有上面相同引用的问题,估计数组c的定义时是值类型相乘,而前面b的定义是引用类型的相乘,因为一维数组是一个引用(借用C#中的值类型和引用类型,不知是否合适)。

你可能感兴趣的:(for rt, dirs, files in os.walk(dir): 作用,input_images = np.array([[0]*784 for i in range(input_count)