os.walk()函数炒鸡详细解析:
**一个编程小白的自我成长之路:**
之前在博客园中查找os.walk函数,不是很理解,半懂不懂的。然后,自己跑了一段代码,运行了一下。其中print((dirpath,dirnames)是我自己加的,为了了解其中运行的原理。(我经常是用print打印出来,看到结果反推其中代码过程*_*嘿嘿,debug断点,我用过几个月还是很有明白其中逻辑,所以这应该是我还是个小白的根本原因,后面还是要查一查debug原理怎么用等)。然后打印出下面的结果:
D:\anaconda\python.exe “D:/虹膜识别源代码/python code/Iris-Recognition-master/datasets.py”
(‘UTIRIS V.1\Infrared Images’, [‘001’, ‘002’, ‘003’, ‘004’, …, ‘078’, ‘079’])
(‘UTIRIS V.1\Infrared Images\001’, [‘001_L’, ‘001_R’])
(‘UTIRIS V.1\Infrared Images\001\001_L’, [])
(‘UTIRIS V.1\Infrared Images\001\001_R’, [])
(‘UTIRIS V.1\Infrared Images\002’, [‘002_L’, ‘002_R’])
其中,UTIRIS V.1\\Infrared Images这个是根目录,根目录下面的孩子是['001', '002', '003', '004', ......', '078', '079'])
然后遍历根目录下的孩子001,也就是'UTIRIS V.1\\Infrared Images\\001这个是子目录,子目录下的孩子是['001_L', '001_R'];然后,子目录下的子目录'UTIRIS V.1\\Infrared Images\\001\\001_L',这个目录下的孩子[]。在然后遍历,根目录的孩子002,也就是UTIRIS V.1\\Infrared Images\\002这个子目录,子目录下的孩子是['002_L', '002_R']。。。后面以此类推下去,也就是os.walk先根据根路径,遍历根下的孩子,在从左遍历第一个子目录,遍历第一个子目录下的孩子,。。。其次类推下去....
![运行程序的目录图](https://img-blog.csdnimg.cn/20200721101058829.jpg)
最后,我展示一个遍历图。
![自己画的遍历图](https://img-blog.csdnimg.cn/20200721105257765.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNjYyNQ==,size_16,color_FFFFFF,t_70)
试验运行的代码如下:
def load_utiris():
data = []
target = []
target_i = 0
index_used = False
for dirpath, dirnames, filenames in os.walk('UTIRIS V.1\\Infrared Images'): #根dirpath 根的孩子dirnames,孩子的名filenames
**print((dirpath,dirnames))**
for f in filenames:
if f.endswith('.bmp'):
data.append('{}\{}'.format(dirpath, f)) #将路径和文件名以元组的形式添加到data列表中
target.append(target_i) #记录文件个数
index_used = True
if index_used:
target_i += 1
index_used = False
return {'data': np.array(data),
'target': np.array(target)} # 返回一个字典 键是data 键值为np.array
神马?!这个解四戒么详细,还是看不懂。那博主,告诉你个更简单的办法,再看一遍。O,my噶,还是看不懂,那就留言吧,我跟你杠杠