簡體   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