pathlib path.glob 用 for 循环问题迭代结果

pathlib path.glob iterating results with for loop question

from pathlib import Path, PureWindowsPath

path=Path(PureWindowsPath('c:/test'))
print(file for file in path.glob('*.*'))
print("\n")
for file in path.glob('*.*'):print(file)

我是菜鸟python,我无法理解for循环和结果之间的区别。我在一个中获取生成器对象,在另一个中获取文件名。

结果是:

<generator object <genexpr> at 0x000002D8446B3970>


c:\test\Changes.xlsx
c:\test\North Accounts V1.1.xlsx
c:\test\North Customer Contact Details.xlsx
c:\test\Py_Test.xlsx

进程已完成,退出代码为 0

原因是这个语法: (x for x in [1, 2, 3]) 创建生成器对象。

对比这个: [x for x in [1, 2, 3]]

创建一个列表。

当您直接打印生成器时,您看不到它的内容。您可以这样做:

print([file for file in path.glob('*.*')])

print(list(file for file in path.glob('*.*')))

list 语句除了使用可迭代对象(生成器是可迭代对象)和 returns 列表形式的结果外,什么都不做。

path.glob 是一个可迭代的,你的表达式 file for file in path.glob(..) 从一个可迭代的中生成一个可迭代的。这是不必要的,但也会给出错误的结果,因为当你打印它时,你得到的是 iterable 的字符串表示(这是一个奇怪的数字)而不是它迭代的元素。