【问题标题】:How to get the newest directory in Python如何在 Python 中获取最新目录
【发布时间】:2012-06-14 13:41:43
【问题描述】:

我正在寻找一种可以找到在另一个目录中创建的最新目录的方法 我唯一的方法是os.listdir(),但它显示了里面的所有文件和目录。如何仅列出目录以及如何访问目录的属性以找出最新创建的目录? 谢谢

【问题讨论】:

    标签: python operating-system directory


    【解决方案1】:
    import os
    dirs = [d for d in os.listdir('.') if os.path.isdir(d)]
    sorted(dirs, key=lambda x: os.path.getctime(x), reverse=True)[:1]
    

    更新:

    也许更多解释:

    [d for d in os.listdir('.') if os.path.isdir(d)]

    是一个列表推导。你可以阅读更多关于他们的信息here

    代码的作用与

    dirs = []
    for d in os.listdir('.'):
        if os.path.isdir(d):
            dirs.append(d)
    

    可以,但列表推导被认为更具可读性。

    sorted()是一个内置函数。一些例子是here

    我展示的代码通过 o​​s.path.getctime(ELEMENT) 对 dirs 中的所有元素进行反向排序。 结果又是一个列表。当然可以使用[index] 语法和slicing 来访问

    【讨论】:

    • 我可以用 listdir() 代替 listdir('.') 吗?
    • 不,os.listdir 需要一个强制参数。这 '。'只是“当前目录”的快捷方式(您也可以使用 os.curdir 代替,或者当然,将绝对/相对路径传递给您感兴趣的目录)
    • 'sorted(dirs, key=lambda x: os.path.getctime(x), reverse=True)[:1]' 实际上显示了一个列表,所以我只能得到第一个元素by 'sorted(dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]' ?
    • @HOAINAMNGUYEN 我更新了答案。我希望现在您更清楚代码的作用了。
    • 这里如何给用户定义路径?
    【解决方案2】:

    这是我编写的一个小函数,用于返回最新目录的名称:

    #!/usr/bin/env python
    
    import os
    import glob
    import operator
    
    def findNewestDir(directory):
        os.chdir(directory)
        dirs = {}
        for dir in glob.glob('*'):
            if os.path.isdir(dir):
                dirs[dir] = os.path.getctime(dir)
    
        lister = sorted(dirs.iteritems(), key=operator.itemgetter(1))
        return lister[-1][0]
    
    print "The newest directory is", findNewestDir('/Users/YOURUSERNAME/Sites')
    

    【讨论】:

    • 你能解释一下lister = sorted(dirs.iteritems(), key=operator.itemgetter(1))这行吗?
    • 当然!所以基本上,我只是在创建一个字典,其中键是目录的名称,值是目录的创建时间。然后,我根据值对字典进行排序以找到最新的目录。另外,请查看stackoverflow.com/questions/613183/…
    • sorted() 是一个内置函数。谷歌搜索“python sorted”可以获得文档和其他一些 SO 问题。 docs.python.org/library/functions.html#sorted
    【解决方案3】:

    以下 Python 代码应该可以解决您的问题。

    import os
    import glob
    for dir in glob.glob('*'):
      if os.path.isdir(dir):
        print dir,":",os.path.getctime(dir)
    

    【讨论】:

    • 这个能找到最新的吗?
    • @jessh 你的另一个答案基本上是这个答案的副本,并添加了排序。如果您只是改进现有答案,最好编辑它们。
    • 谢谢!但 OP 的问题是如何找到目录的属性(创建时间),最终目的是对它们进行排序。我就这样回答了他的问题。第二个答案更进一步排序。我宁愿把它们分开
    • 当问题的第一行是I'm looking for a method that can find the newest directory created inside another directory时,我想我只是很困惑这是如何解决问题的。
    • op 的问题正是:“我怎样才能只列出目录以及如何访问目录的属性以找出最新创建的?”
    【解决方案4】:

    查看os.walk 和文档中的示例,了解获取目录的简单方法。

    root, dirs, files = os.walk('/your/path').next()
    

    然后查看os.path.getctime,这取决于您的操作系统,可能是创建或修改时间。如果您还不熟悉它,您还需要阅读os.path.join

    os.path.getctime(path) 返回系统的 ctime,在某些系统(如 Unix)上是最后一次更改的时间,而在其他系统(如 Windows)上是路径的创建时间。

    max((os.path.getctime(os.path.join(root, f)), f) for f in dirs)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-20
      • 2012-03-11
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      相关资源
      最近更新 更多