2011-08-27 40 views
8

Tôi có phần mới với python và đã cố gắng tìm ra điều này trên của riêng tôi nhưng chỉ nhận được bit và miếng cho đến nay. Về cơ bản tôi đang tìm kiếm một kịch bản mà sẽ đệ quy tìm kiếm một thư mục và đó là thư mục con và xóa các tập tin có ít nhất 24 giờ nhưng không thay đổi các thư mục. Bất kỳ lời khuyên hay ví dụ nào được đánh giá cao.Python - xóa các tệp cũ

Cảm ơn

+2

Bạn đã cố gắng làm gì cho đến nay và điều gì xảy ra? – Mark

+0

Hãy xem các bit và miếng, có lẽ chúng ta có thể giúp dán chúng lại với nhau? – Johnsyweb

+1

Bạn không thể xóa tệp khỏi thư mục mà không thay đổi thư mục. –

Trả lời

5

Nếu bạn cần nó để kiểm tra tất cả các file trong thư mục đệ quy tất cả, một cái gì đó như thế này nên làm:

import os, time 

path = "/path/to/folder" 
def flushdir(dir): 
    now = time.time() 
    for f in os.listdir(dir): 
     fullpath = os.path.join(dir, f) 
     if os.stat(fullpath).st_mtime < (now - 86400): 
      if os.path.isfile(fullpath): 
       os.remove(fullpath) 
      elif os.path.isdir(fullpath): 
       flushdir(fullpath) 

flushdir(path) 
28

này sử dụng phương pháp os.walk đệ quy tìm kiếm một thư mục. Đối với mỗi tệp, nó kiểm tra ngày sửa đổi với os.path.getmtime và so sánh với datetime.now (thời gian hiện tại). datetime.timedelta được xây dựng để tạo ra một timedelta trong 24 giờ.

Tìm kiếm thư mục os.path.curdir là thư mục hiện tại khi tập lệnh được gọi. Bạn có thể đặt dir_to_search cho một thứ khác, ví dụ: một tham số cho tập lệnh.

import os 
import datetime 

dir_to_search = os.path.curdir 
for dirpath, dirnames, filenames in os.walk(dir_to_search): 
    for file in filenames: 
     curpath = os.path.join(dirpath, file) 
     file_modified = datetime.datetime.fromtimestamp(os.path.getmtime(curpath)) 
     if datetime.datetime.now() - file_modified > datetime.timedelta(hours=24): 
      os.remove(curpath) 
Các vấn đề liên quan