遍历目录和文件

目录

  • os.listdir
  • os.walk
  • glob.glob 查找匹配文件

os.listdir

import os
>>> os.listdir(".")
['music', 'speech', 'noise', 'README', 'wave_out.wav', '立体声_缩混.wav', '立体声_缩混_L.wav', '立体声_缩混_R.wav']
  • 可以看到会打印指定目录下的所有目录和文件,注意这个是混在一起的,个人感觉不如下面的方便;

os.walk

import os
def file_name(file_path):
    for root, dirs, files in os.walk(file_path): 
        print(root) 
        print(dirs) 
        print(files)  

file_name('E:\Download\EC Download')
>>> import os
>>>
>>> for root,dirs,files in os.walk("."):
...     print(root)
...
.
./music
./music/fma
./music/fma-western-art
./music/hd-classical
./music/jamendo
./music/rfm
./speech
./speech/librivox
./speech/us-gov
./noise
./noise/free-sound
./noise/sound-bible

备注:os.walk是一个迭代器,依次遍历指定目录下的根路径、文件夹、文件;这个用起来非常方便;

glob.glob 查找匹配文件

文件存放

-rwxr-xr-x 1 60706 fax      1765 Oct 30  2015 README*
drwxr-sr-x 7 60706 fax       128 Oct 30  2015 music/
drwxr-sr-x 4 60706 fax        73 Oct 30  2015 noise/
drwxr-sr-x 4 60706 fax        66 Oct 30  2015 speech/
-rw-r--r-- 1 root  fax   6708268 Dec 28 09:17 wave_out.wav
-rw-r--r-- 1 root  fax  13416492 Dec 28 09:17 立体声_缩混.wav
-rw-r--r-- 1 root  fax   6714658 Dec 28 09:17 立体声_缩混_L.wav
-rw-r--r-- 1 root  fax   6714658 Dec 28 09:17 立体声_缩混_R.wav
  1. 单次匹配
import glob
glob.glob("*.wav")
# ['wave_out.wav', '立体声_缩混.wav', '立体声_缩混_L.wav', '立体声_缩混_R.wav']

只查找当前目录下的匹配文件,不进行递归查找

  1. 递归匹配
import glob
# glob.glob("**/*.wav",recursive=True)
len(glob.glob("./*/*/*.wav",recursive=True)) #2016
len(glob.glob("**/*.wav",recursive=True)) # 2020
# MUSAN总共2016个wav文件;

第一种需要知道具体目录结构;第二种**可以进行递归查找,非常方便

  1. 迭代器方式
import glob
for wav_file in glob.iglob("**/*.wav",recursive=True):
    print(wav_file)
# 前面的glob.glob方式返回list,glob.iglob是迭代器

>>> type(glob.iglob("**/*.wav",recursive=True))
<class 'generator'>

备注:recursive可以递归查找所有匹配文件,但是需要搭配**/完成,使用*/无效,可以和iglob搭配使用;
更多使用方法可以参考:https://zhuanlan.zhihu.com/p/384656362

你可能感兴趣的:(python,开发语言)