【问题标题】:Python glob.glob always returns empty listPython glob.glob 总是返回空列表
【发布时间】:2016-10-03 19:22:42
【问题描述】:

我正在尝试使用 glob 和 os 在目录中找到最新的 .zip 文件。有趣的是,我进行了以下设置,并且之前可以正常工作:

max(glob.glob('../directory/*.zip'), key=os.path.getctime)

现在运行这个让我 max() arg 是一个空序列,这是有道理的,因为当我尝试这个时:

glob.glob('../directory/*.zip')

它只返回一个空列表。使用完整路径也会给我一个空列表。尝试其他目录也会给我一个空列表。我对这里发生的事情感到非常困惑,因为这之前工作得很好。帮忙?

编辑:让它再次使用: glob.glob(/Users/*/directory/*.zip)

【问题讨论】:

  • 您使用的是相对路径,您确定它指向的目录与您假设的目录相同吗?
  • 同意@alfasin。听起来您正在查找的目录中没有 .zip 文件。作为一个测试,以确保无论如何都不会发生奇怪的事情,你可以尝试glob.glob('../directory/*')glob.glob('*')。如果这些返回空列表,那么就会发生一些奇怪的事情。否则,您可能只是指向错误的目录,或者该目录中没有任何 .zip 文件。也尝试使用绝对路径。
  • 如果你没有提到完整路径也失败了,我会假设你只是从不同的目录运行脚本。事实上,我只能假设您输入了错误的完整路径。 os.listdir('../directory/') 的输出是什么?
  • @alfasin 我也尝试过使用完整路径,但仍然返回一个空列表。 @elethan glob.glob('*') 完美运行 @chepner 我得到“没有这样的文件或目录”,但我知道这个目录存在,因为我可以导航到它
  • 好吧,我使用glob.glob(/Users/*/directory/*.zip) 让它再次工作。我仍然不明白为什么它以前有效。

标签: python python-3.x glob


【解决方案1】:

你想要** glob 运算符:

glob.glob('**/*.zip',recursive=True)

将匹配当前目录和所有子目录中所有以“.zip”结尾的文件。

【讨论】:

    【解决方案2】:

    就我而言,我忘记了 escape 使用 glob.escape(pathname) 的目录名称中的特殊字符 [

    所以不要使用glob.glob(pathname),而是尝试glob.glob(glob.escape(pathname))

    【讨论】:

    • +rep,但不要转义星号。例如:glob.glob(glob.escape(path) + '/*.jpg')。转义的星号不会导致全局动作。请编辑您的帖子。
    【解决方案3】:

    我在使用 ubuntu 时遇到了很多问题。 此代码在 Windows 上运行良好

    cv_img = []
    for img in glob.glob('/home/itisha/Desktop/op/*.JPG'):
        print('hi')
        n= cv2.imread(img)
        cv_img.append(n)
    

    但对于 Ubuntu,您必须将第 2 行替换为

    for img in glob.glob('/home/*itisha/*Desktop/*op/*.JPG'):
    

    【讨论】:

    • 在 Ubuntu 上,不需要那么多 *.它肯定会像您编写的那样适用于 Windows。
    • glob.glob 如果您的路径以“~”开头,则我的 Mac 上会返回空列表。它不承认这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    • 1970-01-01
    相关资源
    最近更新 更多