zoukankan      html  css  js  c++  java
  • [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("{} 
    ".format(files))
    for file in files:
        print("{} 
    ".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!

  • 相关阅读:
    git 常用命令
    重要知识点
    HTML 标记语言
    js类型转换
    伪数组变数组 js
    在 JavaScript 中为什么 typeof null 的结果是 object?
    HTML中href、src区别
    解决for循环插入同一元素无法重复插入问题
    HTML5-语义化
    mount 和 /etc/fstab关系。
  • 原文地址:https://www.cnblogs.com/tristatl/p/10799453.html
Copyright © 2011-2022 走看看