使用for循环拆分pathlib.glob返回的文件列表时仅首次迭代有结果
问题原因解答
核心根源
Path.glob() 方法返回的是生成器对象,不是静态存储的列表。生成器属于迭代器的一种,核心特性是只能被遍历一次:首次遍历完成后,迭代指针会移动到生成器末尾,后续再遍历这个对象时就不会返回任何元素,自然只能拿到空列表。
你写的代码中files = folder.glob('*dat*') 赋值的就是生成器对象:
- 第一次循环(筛选.1后缀)时,列表推导式/filter方法会遍历完
files里的所有元素,此时生成器已经被耗尽 - 后续三次循环再遍历
files时,已经没有剩余元素可以筛选,所以返回空列表
修复方案
只需要把glob返回的生成器提前转为可重复遍历的列表即可,修改一行代码:
files = list(folder.glob('*dat*'))
修改后每次循环都可以正常遍历所有文件路径,筛选对应后缀的文件。
内容的提问来源于stack exchange,提问作者Mauro
相关产品推荐
相关产品推荐

