Python glob.glob 总是返回空列表

23

我正在尝试使用glob和os来定位一个目录中最新的.zip文件。有趣的是,我之前已经设置好了以下内容,并且之前它也能够正常工作:

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

现在运行这个程序会出现max() arg is an empty sequence的错误,这很有道理,因为我尝试了以下代码:

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

它只返回一个空列表。使用完整路径也得到了一个空列表。尝试其他目录也得到了一个空列表。考虑到之前它完美地工作,我感到非常困惑。求助?

编辑:使用以下代码使其再次正常工作:glob.glob(/Users/*/directory/*.zip)


5
你正在使用相对路径,你确定它指向的是你假定的同一目录吗? - Nir Alfasi
3
同意@alfasin的观点。听起来你正在遍历的目录中没有.zip文件。为了确保不管发生什么奇怪的情况都能得到一个空列表,你可以尝试使用glob.glob('../directory/*')glob.glob('*')进行测试。如果这些返回空列表,那么可能出现了一些奇怪的问题。否则,你可能只是指向了错误的目录,或者该目录���没有任何.zip文件。尝试使用绝对路径也是一个办法。 - elethan
如果你没有提到完整路径也失败了,我会认为你只是在从不同的目录运行脚本。既然如此,我只能假设你输入了错误的完整路径。os.listdir('../directory/') 的输出是什么? - chepner
@alfasin 我已经尝试了完整路径,但仍然返回一个空列表。 @elethan glob.glob('*') 完美地工作了 @chepner 我得到了“没有这样的文件或目录”的错误,但我知道这个目录存在,因为我可以导航到它 - TheVideotapes
我使用 glob.glob(/Users/*/directory/*.zip) 又让它恢复正常了。但是我仍然不明白为什么以前能用。 - TheVideotapes
3个回答

11

您需要使用 ** 通配符操作符:

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

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


6
在我的情况下,我忘记了对目录名称中的特殊字符[进行转义,使用glob.escape(pathname)
因此,请尝试使用glob.glob(glob.escape(pathname))而不是glob.glob(pathname)

2
+rep,但不要转义星号。例如:glob.glob(glob.escape(path) + '/*.jpg')。转义的星号不会引起glob操作。请编辑您的帖子。 - A. Genchev
我通常不使用这些特殊字符,但这是我的客户的情况。谢谢。 - HyeonPhil Youn

0

我在Ubuntu上遇到了很多globbing问题。 这段代码在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上工作。 - SKR
5
如果您的路径以“~”开头,那么在我的Mac上使用glob.glob将返回一个空列表。 它无法识别这个符号。 - Tony
真的,你必须获取完整路径,即-> pathlib.Path.home并将其前置。 - m3nda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接