微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Glob 不返回指定目录中的文件列表

如何解决Glob 不返回指定目录中的文件列表

我在 Stack Overflow 上的其他帖子中找到了两种列出指定目录中文件方法,但我似乎无法让它们工作。第一个返回路径,第二个返回我正在查找的文件以及路径。我尝试了多种方法,例如重命名目标目录和文件,但似乎并没有奏效。

有问题的代码

import glob

jpgFilenamesList = glob.glob(r"C:\Users\viodo\PycharmProjects\pythonProject")
print(jpgFilenamesList)

mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"

file_list = glob.glob(mydir + "/*.jpg")
print(file_list)

我得到了什么:

['C:\\Users\\viodo\\PycharmProjects\\pythonProject']
['C:\\Users\\viodo\\PycharmProjects\\pythonProject\\dngjknfjkg.jpg','C:\\Users\\viodo\\PycharmProjects\\pythonProject\\fjkdnfkl.jpg','C:\\Users\\viodo\\PycharmProjects\\pythonProject\\skdklenfkd.jpg']

在另一个线程中找到的解决方案:Python glob multiple filetypes

一些调整让它运行顺畅。感谢您的帮助!

解决方法

Glob 返回相对于根目录的路径名列表。除非指定的 glob 模式是绝对路径,否则假定该根目录是您当前的工作目录。总之,因为你的模式是绝对路径模式,所以返回的文件不会是相对的,而是绝对的,包括整个路径。

当不使用绝对路径模式时,在某些情况下,如果当前工作目录中的文件名匹配,您可能只得到一个文件名。该文件名当然是相对于当前工作目录的。

在 Python 3.10 中,您应该能够通过新的 root_dir 参数在不使用绝对模式的情况下更改假定的根目录,但目前在 3.9 及以下版本中不可用:https://docs.python.org/3.10/library/glob.html

在您的情况下,正如其他人在评论中提到的,os.path.basename 应该能够获得文件名,如果这是您所追求的。或者,您可以通过 os.chdir 更改当前工作目录并提供简单的 *.jpg glob 模式并仅获取与当前工作目录相关的文件名,这两种方法都是合理的解决方案。

提取基本名称:

mydir = r"C:\Users\viodo\PycharmProjects\pythonProject"
file_list = [os.path.basename(f) for f in glob.glob(mydir + "/*.jpg")]

或返回与任意“当前工作目录”相关的文件:

os.chdir(r"C:\Users\viodo\PycharmProjects\pythonProject")
file_list = glob.glob("*.jpg")

根据您的要求,一种解决方案可能比另一种更好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。