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 的字符串表示(这是一个奇怪的数字)而不是它迭代的元素。
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 的字符串表示(这是一个奇怪的数字)而不是它迭代的元素。