繁体   English   中英

尝试在python中获取最新创建的目录时发生错误

[英]error when trying to get the newest created directory in python

我想获取最新创建的目录。 我关注了这篇文章 但尝试时出现错误。

这是我的目录清单

    ls backups
    BACKUPSET_2016-01-14_11-26_.zip  DIFF-2016-01-17_00-00  DIFF-2016-01-20_00-00
    BACKUPSET_2016-01-14_11-28_.zip  DIFF-2016-01-18_00-00  DIFF-2016-01-21_00-00
    DIFF-2016-01-16_00-00            DIFF-2016-01-19_00-00  FULL-2016-01-14_14-11

我想获取以“ DIFF”开头的最新创建的文件

这是我尝试过的。

def get_latest_directory():
   all_dirs = [d for d in os.listdir('backups') if (os.path.isdir(d) and d.startswith('DIFF'))]
   print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]

if __name__=="__main__":
   get_latest_directory()

当我运行此脚本时,我得到

./backup.py 
Traceback (most recent call last):
  File "./backup.py", line 33, in <module>
    get_latest_directory()
  File "./backup.py", line 19, in get_latest_directory
    print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]
IndexError: list index out of range

我在上面的功能上做了一个小的改变

def get_latest_directory():
   all_dirs = [d for d in os.listdir('backups')]
   print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]

现在我得到:

Traceback (most recent call last):
  File "./backup.py", line 34, in <module>
    get_latest_directory()
  File "./backup.py", line 20, in get_latest_directory
    print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]
  File "./backup.py", line 20, in <lambda>
    print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]
  File "/usr/lib64/python2.7/genericpath.py", line 64, in getctime
    return os.stat(filename).st_ctime
OSError: [Errno 2] No such file or directory: 'FULL-2016-01-14_14-11'

这没有任何意义,因为我执行ls命令时会看到此目录“ FULL-2016-01-14_14-11”。

我做错了。 我不知道。

谢谢

您需要完整的路径名,因此只需将其添加到列表理解中的d中即可。

def get_latest_directory():
    path_to_backups = 'path/to/backups/'
    all_dirs = [path_to_backsups + d for d in os.listdir(path_to_backups) if (os.path.isdir(path_to_backups + d) and d.startswith('DIFF'))]
    print sorted(all_dirs, key=lambda x: os.path.getctime(x), reverse=True)[0]

if __name__=="__main__":
   get_latest_directory()   

正如SirParselot所述,您需要完整路径,而os.listdir()仅提供相对路径。 要解决此问题,请使用os.path.abspath() ,它将相对路径映射到绝对路径。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM