【问题标题】:pathlib path.glob iterating results with for loop questionpathlib path.glob 使用 for 循环问题迭代结果
【发布时间】:2020-04-05 12:44:05
【问题描述】:
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 结束

【问题讨论】:

    标签: python path generator pathlib


    【解决方案1】:

    原因是这个语法: (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 语句除了消耗一个可迭代对象(并且生成器是可迭代对象)并以列表的形式返回结果外,什么也不做。

    【讨论】:

    • 谢谢!我现在明白了。
    • 哦,我在那里复制和粘贴错误。 print(list(path.glob("*"))) 当然就够了。无需再次进入file for file - 因为这基本上是list 所做的:)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2022-06-23
      • 2015-11-13
      • 2020-05-19
      相关资源
      最近更新 更多