2011-10-20 31 views
5

Tôi khá mới đối với Python, nhưng tôi đã nhận được mã này để hoạt động, và trên thực tế, hãy làm những gì nó dự định làm.Python Xóa một số Tiện ích Tập tin nhất định

Tuy nhiên, tôi tự hỏi nếu có cách hiệu quả hơn để mã hóa điều này, có lẽ để tăng tốc độ xử lý.

import os, glob 


def scandirs(path): 
    for currentFile in glob.glob(os.path.join(path, '*')): 
     if os.path.isdir(currentFile): 
      print 'got a directory: ' + currentFile 
      scandirs(currentFile) 
     print "processing file: " + currentFile 
     png = "png"; 
     jpg = "jpg"; 
     if currentFile.endswith(png) or currentFile.endswith(jpg): 
      os.remove(currentFile) 

scandirs('C:\Program Files (x86)\music\Songs') 

Hiện tại, có khoảng 8000 tệp và phải mất một thời gian để xử lý mọi tệp và kiểm tra xem tệp có thực sự kết thúc bằng png hoặc jpg hay không.

+1

Bạn có thể muốn xem ['os.path.walk'] (http://docs.python.org/library/os.path.html#os.path.walk). –

+0

Cảm ơn! Tôi sẽ sử dụng nó. – Two

Trả lời

15

Vì bạn đang recursing qua các thư mục con, sử dụng os.walk:

import os 

def scandirs(path): 
    for root, dirs, files in os.walk(path): 
     for currentFile in files: 
      print "processing file: " + currentFile 
      exts = ('.png', '.jpg') 
      if any(currentFile.lower().endswith(ext) for ext in exts): 
       os.remove(os.path.join(root, currentFile)) 
+0

@Sam: Cảm ơn bạn đã sửa! – unutbu

+0

Nếu bạn thay đổi 'exts = ('. Png', '.jpg')' thành 'exts = ['. Png', '.jpg']', thì mã này cũng chỉ hoạt động với 1 phần mở rộng. – AliBZ

+0

Tôi nghĩ rằng thực hiện một vòng lặp thứ 3 cho kết thúc sẽ chậm hơn so với sử dụng phương thức 'os.path.splitext()' và so sánh, nhưng tôi đã hẹn giờ nó và đây là giải pháp nhanh nhất. – Blairg23

1

Nếu chương trình hoạt động và tốc độ có thể chấp nhận, tôi sẽ không thay đổi nó.

Nếu không, bạn có thể thử câu trả lời của unutbu.

Nói chung, tôi sẽ rời bỏ những thứ

png = "png" 
jpg = "jpg" 

như tôi không thấy mục đích nào ở không sử dụng các dây trực tiếp.

Và thử nghiệm tốt hơn cho ".png" thay vì "png".

Một giải pháp tốt hơn sẽ được xác định

extensions = ('.png', '.jpg') 

đâu đó centally và sử dụng rằng trong

if any(currentFile.endswith(ext) for ext in extensions): 
    os.remove(currentFile) 

.

Các vấn đề liên quan