[英]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.