【问题标题】:Python: how to get the first file in directory?Python:如何获取目录中的第一个文件?
【发布时间】:2016-01-31 13:49:26
【问题描述】:

所以我想在 Python 中抓取一个目录下的第一个文件。我知道我可以这样做:

first_file = [join(path, f) for f in os.listdir(path) if isfile(join(path, f))][0]

但它很慢。有没有更好的解决方案?谢谢!

【问题讨论】:

  • 感谢@gtlambert。确实很快。我正要编辑它:P

标签: python python-2.7 listdir


【解决方案1】:

你可以使用next():

first_file = next(join(path, f) for f in os.listdir(path) if isfile(join(path, f)))

请注意,如果目录中没有文件,则会抛出StopIteration 异常。要么处理它,要么提供一个默认值

first_file = next((join(path, f) for f in os.listdir(path) if isfile(join(path, f))), 
                  "default value here")

【讨论】:

  • 哦,上面next里面的代码是不是生成了一个迭代器?
  • @tnq177 确切地说,next() 在这种情况下将获得第一个迭代器的值,或者抛出 StopIteration 异常。
  • 酷!非常感谢,伙计。我刚刚测试并看到了结果。它的速度更快。我不知道上面的语法会生成一个迭代器。那么我们在列表理解中所做的基本上是将迭代器转换为列表? PS:我还要再等7分钟才能接受你的回答。
  • @tnq177 在你的情况下,你首先形成一个完整的文件列表,然后得到第一个结果。在这种情况下,有一个迭代器构建,然后只前进一次。您可能还需要查看glob.iglob 并尝试将其与next 一起使用:smth like next(glob.iglob(join(path, ".*")))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多