Đối với nhiều tiện ích, đơn giản nhất là chỉ để sử dụng str.endswith
đi qua một tuple của chuỗi con cần kiểm tra:
for file in files:
if file.endswith((".avi",".mp4","wmv")):
print (os.path.join(subdir, file))
Bạn có thể sử dụng iglob
như dưới đây và chuỗi các tìm kiếm trả lại hoặc sử dụng re.search nhưng sử dụng endswith
là có lẽ là cách tiếp cận tốt nhất.
from itertools import chain
from glob import iglob
for subdir, dirs, files in os.walk(rootdir):
for file in chain.from_iterable(iglob(os.path.join(rootdir,p)) for p in ("*.avi", "*.mp4", "*wmv")) :
print(os.path.join(subdir, file))
Sử dụng python3.5
glob bây giờ hỗ trợ tìm kiếm đệ quy với ** cú pháp:
from itertools import chain
from glob import iglob
from glob import iglob
for file in chain.from_iterable(iglob(os.path.join(rootdir,p))
for p in (rootdir+"**/*.avi", "**/*.mp4", "**/*wmv")):
print(file)
Nguồn
2015-08-11 17:47:54
Cảm ơn ozgur, mã này gần nhất với những gì tôi đã có ban đầu - cũng dễ hiểu. Các câu trả lời khác có thể hiệu quả hơn nếu được thực hiện trên quy mô lớn (không thử nghiệm!), Nhưng đối với các nhiệm vụ đơn giản của tôi, điều này sẽ hoàn toàn đủ. – pufAmuf