2010-01-06 30 views
18

Tôi đang cố gắng có một tập lệnh tự động nhập vào thư mục được tạo gần đây nhất.Tìm thư mục mới nhất trong một thư mục bằng Python

Tôi có một số mã dưới đây

import datetime, os, shutil 

today = datetime.datetime.now().isoformat() 
file_time = datetime.datetime.fromtimestamp(os.path.getmtime('/folders*')) 

if file_time < today: 
    changedirectory('/folders*') 

Tôi không chắc chắn làm thế nào để có được điều này để kiểm tra các dấu thời gian mới nhất từ ​​bây giờ. Bất kỳ ý tưởng?

Cảm ơn

+0

Cảm ơn Alex, rằng hoạt động hoàn hảo – chrissygormley

Trả lời

40

Không có dấu vết thực tế của "thời gian tạo ra" trong hầu hết các hệ điều hành/filesystems: những gì bạn có được càng mtime là thời gian một tập tin hoặc thư mục đã được sửa đổi (ví dụ như tạo một tệp trong thư mục cập nhật thời gian của thư mục) - và từ ctime, khi được cung cấp, thời gian thay đổi inode mới nhất (s o nó sẽ được cập nhật bằng cách tạo hoặc loại bỏ một thư mục con).

Giả sử bạn ổn với ví dụ: "Sửa đổi lần cuối" (và việc bạn sử dụng "tạo ra" trong câu hỏi chỉ là một lỗi), bạn có thể tìm thấy (ví dụ như) tất cả các thư mục con của thư mục hiện:

import os 

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

và nhận được một với mtime mới nhất (bằng Python 2.5 hoặc tốt hơn):

latest_subdir = max(all_subdirs, key=os.path.getmtime) 

Nếu bạn cần để hoạt động ở nơi khác hơn so với thư mục hiện hành, nó không phải là rất khác nhau, ví dụ:

def all_subdirs_of(b='.'): 
    result = [] 
    for d in os.listdir(b): 
    bd = os.path.join(b, d) 
    if os.path.isdir(bd): result.append(bd) 
    return result 

phân latest_subdir không n ot thay đổi được đưa ra, như all_subdirs, bất kỳ danh sách đường dẫn nào (có thể là đường dẫn của các thư mục hoặc tệp, mà cuộc gọi max nhận được lần sửa đổi mới nhất).

+2

Nếu phiên bản Python được sử dụng không hỗ trợ đối số 'khóa' (ví dụ 2.4), bạn có thể sử dụng' latest_subdir = max ((os.path.getmtime (f), f) cho f trong all_subdirs) [1] ' –

1

đây là một cách để tìm thư mục mới nhất

import os 
import time 
import operator 
alist={} 
now = time.time() 
directory=os.path.join("/home","path") 
os.chdir(directory) 
for file in os.listdir("."): 
    if os.path.isdir(file): 
     timestamp = os.path.getmtime(file) 
     # get timestamp and directory name and store to dictionary 
     alist[os.path.join(os.getcwd(),file)]=timestamp 

# sort the timestamp 
for i in sorted(alist.iteritems(), key=operator.itemgetter(1)): 
    latest="%s" % (i[0]) 
# latest=sorted(alist.iteritems(), key=operator.itemgetter(1))[-1] 
print "newest directory is ", latest 
os.chdir(latest) 
+0

tôi cũng đang tìm cách tạo một tệp txt với tên thư mục và dấu thời gian. và tệp txt này sẽ được nối thêm sau khi tôi chạy tập lệnh trên cứ 30 phút một lần. ý định của tôi là tạo tệp txt với tất cả tên thư mục con và đường dẫn cùng với dấu thời gian wioth trong một hàng. làm thế nào tôi có thể làm điều đó với mã trên như biến timestamp gves một số số weired? – learnningprogramming

0
import os, datetime, operator 

dir = "/" 
folders = [(f,os.path.getmtime('%s/%s'%(dir,f))) for f in os.listdir(dir) if os.path.isdir(f)] 
(newest_folder, mtime) = sorted(folders, key=operator.itemgetter(1), reverse=True)[0] 
4

Và một cách nhanh chóng một liner:

directory = 'some/path/to/the/main/dir' 
max([os.path.join(directory,d) for d in os.listdir(directory)], key=os.path.getmtime) 
4

Một lót để tìm mới nhất

# Find latest 
import os; import glob 
max(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime) 

Một lót để tìm n'th mới nhất

# Find n'th latest 
import os; import glob 
sorted(glob.glob(os.path.join(directory, '*/')), key=os.path.getmtime)[-n] 
Các vấn đề liên quan