[python]glob模塊中的glob()函數為什么返回空列表??


最近在學習語音的知識,看一個語音合成實現的相關工具包的源代碼,碰到了glob()函數。然后開啟了我與這個函數相愛想殺的一個下午。

摘自官網解釋:

https://docs.python.org/2/library/glob.html#module-glob

 

簡而言之,這個函數的作用呢就是按照unix shell的規則匹配一定模式的路徑名,返回一個無序的列表。

我的代碼使用:

from os.path import join
from glob import glob
import numpy as np

DATA_ROOT = "~/文檔/nnmnkwii/nnmnkwii_gallery-master/data/slt_arctic_full_data"
files = sorted(glob(join(DATA_ROOT, "merlin_baseline_practice", "duration_data", "label_state_align", "*.lab")))
print("{} \n".format(files))
for file in files:
    print("{} \n".format(file))

 

我是要用這個代碼匹配對應文件夾下的.lab文件,但是明明文件夾下有數據,但是返回的就是個空列表。

關鍵問題是不要使用相對路徑,要使用絕對路徑,

上面官網解釋也說了,對於~和shell變量使用os.path.expanduser()和os.path.expandvars()擴展。

for tilde and shell variable expansion, use os.path.expanduser() and os.path.expandvars().

 將DATA_ROOT中的”~“改成”/home/tangli“就ok了。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ok,不重要的其他碎碎念,如果過程這么簡單就好了,但是畢竟是耗費了我一個下午的時間與精力的故事。

源碼中有個.py文件也用到了這個函數,和我上面的代碼幾乎沒有差別,也用的相對路徑。

但是該源代碼運行良好,毫無問題,所以是命運暗中出了差錯嗎?

后來經過大佬相助,可能命運對我施以援手,看不得我被bug折磨的痛苦不堪吧,畢竟五一勞動節我還在辛勤勞動調bug。

后來發現,該源代碼中有這樣幾行代碼:

from docopt import docopt
if __name__ == "__main__":
    args = docopt(__doc__)
    DATA_ROOT = args["<DATA_ROOT>"]
    DST_ROOT = DATA_ROOT
    max_num_files = int(args["--max_num_files"])
    overwrite = args["--overwrite"]
    use_phone_alignment = args["--use_phone_alignment"]
    question_path = args["--question_path"]

    print(DATA_ROOT)

 

問題就在第一行,這個神奇的模塊的作用,將我傳遞的DATA_ROOT參數的相對路徑改成了絕對路徑。

若諸君感興趣,就去研究源代碼吧,奉上鏈接:

https://github.com/docopt/docopt

done!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM