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]得知:\colon

  1. 字串符中可以包括*,?[ ],其中*表示匹配任意字符串,?匹配任意單個字符,[0-9][a-z]表示匹配0-9單個數字與a-z單個字符。
  2. glob.glob不支持~波浪符號,這個符號在linux代表當前用戶的home目錄。
  3. 官方文檔說"This is done by using the os.listdir() and fnmatch.fnmatch() functions in concert, not by actually invoking a sub shell"。 os.listdir(path)[3]用於返回指定的文件夾包含的文件或文件夾的名字列表,列表以字母排序,但不包括'.'和'..'。fnmatch.fnmatch()[4]主要是用來判斷一個文件名稱是否匹配"Unix shell-style wildcards"這種模式,類似ls *.log
  4. 官方source code,返回的是一個list,但是他是使用iterator實現的。所以它的內存佔用是常數級別的。注意,他這裡使用了yield關鍵字來實現iterator。

因為glob.glob()返回list是arbitrary order,所以需要再使用sorted()來排序,根據[5]的描述,sorted()函數對所有可迭代的對象進行排序操作。

sort與sorted區別:\colon sort是應用在list上的方法,sorted可以對所有可迭代的對象進行排序操作。 list的sort方法返回的對已經存在的列表進行操作,而sorted方法返回的是一個新的列表,而不是在原來的列表進行操作。

[1] https://docs.python.org/3/library/glob.html

[2] python glob.glob使用

[3] Python os.listdir()方法

[4] python fnmatch

[5] Python sorted() 函數

results matching ""

    No results matching ""