2014-04-02 14 views
18

Tôi đang cố gắng phát hiện các tệp có danh sách tiện ích mở rộng.Sử dụng kết thúc bằng nhiều tiện ích

ext = [".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv"] 
if file.endswith(ext): # how to use the list ? 
    command 1 
elif file.endswith(""): # it should be a folder 
    command 2 
elif file.endswith(".other"): # not a video, not a folder 
    command 3 
+1

'file.endswith ("") 'luôn là' TRUE', vì vậy' elif' của bạn có thể doesn' Làm những gì bạn nghĩ. '". " không có trong tệp' có thể gần hơn. – kindall

+0

Có, Nó phải là một thư mục. Sau đó, tôi phải đi trong thư mục này để có được các tập tin. (Tôi đã chỉnh sửa câu hỏi để rõ ràng hơn) – Guillaume

+0

Bạn có thể sử dụng 'os.path.splitext (filename)' để lấy phần mở rộng ra khỏi 'filename': https://docs.python.org/2/library/os .path.html # os.path.splitext – Don

Trả lời

51

Sử dụng bộ dữ liệu cho nó.

>>> ext = [".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv"] 

>>> ".wmv".endswith(tuple(ext)) 
True 
>>> ".rand".endswith(tuple(ext)) 
False 

Thay vì chuyển đổi mọi lúc, chỉ cần chuyển đổi thành tuple một lần.

4

Bạn không thể tạo một tuple ngay từ đầu? Tại sao bạn phải làm:

>>> ".wmv".endswith(tuple(ext)) 

Không thể bạn chỉ cần làm:

>>> ext = (".3g2", ".3gp", ".asf", ".asx", ".avi", ".flv", \ 
         ".m2ts", ".mkv", ".mov", ".mp4", ".mpg", ".mpeg", \ 
         ".rm", ".swf", ".vob", ".wmv") 
Các vấn đề liên quan