sorted(glob.glob(folder_path))
(in main.py)
Figure 2: 資料夾檔案結構
Figure 2是kaggle比賽資料的檔案結構
- Folder A 放著所有story audio wav files,命名的方式為
Axxxxxxx.wav
- Folder B和C(需要密碼解壓縮)有subfolder B,裡面是所有問題(Query)的audio wav file,subfolder C,裡面是所有選項的audio wav files。
- Kaggle答題-編號不連續-空白.csv是空白csv檔,是表示要submit檔的格式。
- README.md是比賽的簡介。
The glob
module is imported in 導入python modules
36 speechFileList = sorted(glob.glob('./BC/C/*.wav'))
37 answer_per_Q = np.zeros(len(speechFileList))+3
print output 結果
The glob
module finds all the pathnames matching a specified pattern according to the rules used by the Unix shell, although results are returned in arbitrary order[1].
根據[2]得知
- 字串符中可以包括
*
,?
和[ ]
,其中*
表示匹配任意字符串,?
匹配任意單個字符,[0-9]
與[a-z]
表示匹配0-9單個數字與a-z單個字符。 glob.glob
不支持~
波浪符號,這個符號在linux代表當前用戶的home目錄。- 官方文檔說"This is done by using the
os.listdir()
andfnmatch.fnmatch()
functions in concert, not by actually invoking a sub shell"。os.listdir(path)
[3]用於返回指定的文件夾包含的文件或文件夾的名字列表,列表以字母排序,但不包括'.'和'..'。fnmatch.fnmatch()
[4]主要是用來判斷一個文件名稱是否匹配"Unix shell-style wildcards"這種模式,類似ls *.log
。 - 官方source code,返回的是一個list,但是他是使用iterator實現的。所以它的內存佔用是常數級別的。注意,他這裡使用了
yield
關鍵字來實現iterator。
因為glob.glob()
返回list是arbitrary order,所以需要再使用sorted()
來排序,根據[5]的描述,sorted()
函數對所有可迭代的對象進行排序操作。
sort與sorted區別 sort是應用在list上的方法,sorted可以對所有可迭代的對象進行排序操作。 list的sort方法返回的對已經存在的列表進行操作,而sorted方法返回的是一個新的列表,而不是在原來的列表進行操作。
[1] https://docs.python.org/3/library/glob.html
[4] python fnmatch