什麼是獲取目錄中所有文件列表的最佳方式,按日期排序[已創建|修改],在Windows機器上使用python?如何獲取按python創建日期排序的目錄列表?
回答
下面是一個更詳細的@Greg Hewgill
's answer版本。這是最符合問題要求的。它區分創建日期和修改日期(至少在Windows上)。
#!/usr/bin/env python
from stat import S_ISREG, ST_CTIME, ST_MODE
import os, sys, time
# path to the directory (relative or absolute)
dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.'
# get all entries in the directory w/ stats
entries = (os.path.join(dirpath, fn) for fn in os.listdir(dirpath))
entries = ((os.stat(path), path) for path in entries)
# leave only regular files, insert creation date
entries = ((stat[ST_CTIME], path)
for stat, path in entries if S_ISREG(stat[ST_MODE]))
#NOTE: on Windows `ST_CTIME` is a creation date
# but on Unix it could be something else
#NOTE: use `ST_MTIME` to sort by a modification date
for cdate, path in sorted(entries):
print time.ctime(cdate), os.path.basename(path)
實施例:
$ python stat_creation_date.py
Thu Feb 11 13:31:07 2009 stat_creation_date.py
我已經在過去這樣做的Python腳本,以確定一個目錄中的最後更新文件:
import glob
import os
search_dir = "/mydir/"
# remove anything from the list that is not a file (directories, symlinks)
# thanks to J.F. Sebastion for pointing out that the requirement was a list
# of files (presumably not including directories)
files = filter(os.path.isfile, glob.glob(search_dir + "*"))
files.sort(key=lambda x: os.path.getmtime(x))
這應該做你要找的基於文件的修改時間。
編輯:請注意,如果需要,您也可以使用os.listdir()來代替glob.glob() - 我在原始代碼中使用glob的原因是我只想使用glob來搜索對於具有一組特定文件擴展名的文件,glob()更適合。要使用listdir,看起來是這樣的:
import os
search_dir = "/mydir/"
os.chdir(search_dir)
files = filter(os.path.isfile, os.listdir(search_dir))
files = [os.path.join(search_dir, f) for f in files] # add path to each file
files.sort(key=lambda x: os.path.getmtime(x))
也許你應該使用shell命令。在Unix/Linux中,查找管道可能會做你想做的事情。
這裏是一個班輪:
import os
import time
from pprint import pprint
pprint([(x[0], time.ctime(x[1].st_ctime)) for x in sorted([(fn, os.stat(fn)) for fn in os.listdir(".")], key = lambda x: x[1].st_ctime)])
這就要求os.listdir()來獲取文件名列表,然後調用每一個os.stat()來獲取創建時間,然後排序反對創作時間。
請注意,此方法僅爲每個文件調用一次os.stat(),這比在排序中爲每個比較調用它更有效。
這裏是我的版本:
def getfiles(dirpath):
a = [s for s in os.listdir(dirpath)
if os.path.isfile(os.path.join(dirpath, s))]
a.sort(key=lambda s: os.path.getmtime(os.path.join(dirpath, s)))
return a
首先,我們所建立的文件名列表。 isfile()用於跳過目錄;如果應該包含目錄,則可以省略它。然後,我們使用修改日期作爲關鍵字就地對列表進行排序。
sorted(filter(os.path.isfile, os.listdir('.')),
key=lambda p: os.stat(p).st_mtime)
你可以使用os.walk('.').next()[-1]
,而不是與os.path.isfile
過濾,但還有死的符號鏈接列表,並os.stat
將無法在他們身上。
有一個os.path.getmtime
函數給出的秒數從epoch 和應該比os.stat更快。
os.chdir(directory)
sorted(filter(os.path.isfile, os.listdir('.')), key=os.path.getmtime)
這是一個基本的步驟學習:
import os, stat, sys
import time
dirpath = sys.argv[1] if len(sys.argv) == 2 else r'.'
listdir = os.listdir(dirpath)
for i in listdir:
os.chdir(dirpath)
data_001 = os.path.realpath(i)
listdir_stat1 = os.stat(data_001)
listdir_stat2 = ((os.stat(data_001), data_001))
print time.ctime(listdir_stat1.st_ctime), data_001
下面是使用水珠不帶過濾器,如果你想有一定的延伸日期順序(Python 3中)讀取文件我的答案。
dataset_path='/mydir/'
files = glob.glob(dataset_path+"/morepath/*.extension")
files.sort(key=os.path.getmtime)
不改變目錄:
import os
path = '/path/to/files/'
name_list = os.listdir(path)
full_list = [os.path.join(path,i) for i in name_list]
time_sorted_list = sorted(full_list, key=os.path.getmtime)
print time_sorted_list
# if you want just the filenames sorted, simply remove the dir from each
sorted_filename_list = [ os.path.basename(i) for i in time_sorted_list]
print sorted_filename_list
亞歷克斯考文垂的答案,如果該文件是一個符號鏈接到所沒有的文件會產生一個例外,以下代碼糾正這個問題的答案:
import time
import datetime
sorted(filter(os.path.isfile, os.listdir('.')),
key=lambda p: os.path.exists(p) and os.stat(p).st_mtime or time.mktime(datetime.now().timetuple())
當文件不存在時,將使用now(),並且符號鏈接將位於列表的最後。
在蟒蛇3.5+
from pathlib import Path
sorted(Path('.').iterdir(), key=lambda f: f.stat().st_mtime)
- 1. 如何獲得按創建日期排序的PHP目錄列表?
- 2. 如何在BASH中按創建日期排序目錄?
- 3. 使用C#按創建日期降序獲取目錄中的文件列表
- 4. 按創建日期列出目錄
- 5. 在Dlang中獲取按修改日期排序的目錄列表
- 6. python:ftp獲取目錄創建日期
- 7. 在Python中按日期排序日期列表
- 8. 獲取Sitecore項目排序依據創建日期
- 9. 列表分支按創建日期排序
- 10. 如何按日期排序ListView項目
- 11. 從目錄獲取按名稱排序的文件列表
- 12. 按創建日期排序文件 - iOS
- 13. 按創建日期排序DirectoryInfo
- 14. 從2個表中獲取列並按日期排序
- 15. 如何創建按鈕以升序和降序排序日期?
- 16. BigCommerce獲取按分鐘創建日期創建日期
- 17. 編碼到電子郵件的日曆項目按創建日期排序 - 需要按預約日期排序
- 18. 按日期排序的文章列表
- 19. 按日期排序列表,然後按最新順序排列
- 20. 如何在java中按日期排序目錄中的文件?
- 21. 如何打開按日期排序的目錄?
- 22. MySQL條目按錯誤順序排列按日期排序
- 23. 如何比較/排序日期與目標C日期排列
- 24. 根據文件創建日期排列(並列舉)目錄列表?
- 25. 如何按日期排序
- 26. 如何按日期排序
- 27. 如何排序按日期時間排序的記錄?
- 28. 如何獲取按時間戳排序的目錄文件列表?
- 29. 如何按日期排序,但按某個列值排序SQL
- 30. 獲取目錄列表生成日期順序在.net 3.0
水珠()是好的,但要記住,它會跳過開頭的文件一段時間。 * nix系統將這些文件視爲隱藏(因此將其從列表中省略),但在Windows中它們是普通文件。 – efotinis 2008-10-03 19:31:24
這些解決方案不會從列表中排除dirs。 – Constantin 2008-10-03 21:00:48
您的os.listdir解決方案缺少os.path.join: files.sort(lambda x,y:cmp(os.path.getmtime(os.path.join(search_dir,x)),os.path。 getmtime(os.path.join(search_dir,y)))) – 2008-10-04 02:56:11