2015-08-11 16 views
5

Belirli dosya türlerinin tüm dosyalarını bulmak için bir klasöre ve tüm alt klasörlere geçmeye çalışıyorum - örneğin yalnızca .mp4, .avi, .wmv. İştePython - Belirli uzantıların dosyalarından geçiş

ne var şimdi, bu tüm dosya türleri aracılığıyla döngüsü:

import os 
rootdir = 'input' 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
      print (os.path.join(subdir, file)) 

teşekkürler! Birden uzantıları için

cevap

6

Bunun sonundan dosya uzantısı bir yol alır ve böler os.path.splitext kullanabilirsiniz: ayrıntılı bir açıklama Padraic için

import os 
rootdir = 'input' 
extensions = ('.mp4', '.avi', '.wmv') 

for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     ext = os.path.splitext(file)[-1].lower() 
     if ext in extensions: 
      print (os.path.join(subdir, file)) 
+0

Teşekkürler ozgur, bu kod orijinal olarak sahip olduğum en yakın - aynı zamanda kolay anlaşılır. Diğer cevaplar, büyük ölçekli (eğer test etmedi!) Yapılırsa daha verimli olabilir, ancak basit görevlerim için bu tamamen yeterli olacaktır. – pufAmuf

13

, en basit sadece kontrol etmek alt dizeleri bir demet geçirerek str.endswith kullanmaktır: Aşağıdaki zincir gibi dönen aramalar iglob kullanabilir veya re.search kullanabilirsiniz

for file in files: 
     if file.endswith((".avi",".mp4","wmv")): 
     print (os.path.join(subdir, file)) 

ama endswith olduğunu kullanılarak Muhtemelen en iyi yaklaşım. python3.5glob kullanma

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)) 

şimdi ** sözdizimi ile özyinelemeli aramaları destekler:

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) 
+0

Teşekkür, altında bunu çok farklı şekillerde bir şey yapmak nasıl çok ilginç Python. – pufAmuf

+0

Sorun yok, rica ederim. –

+1

tuple +1 –

3

Aslında birkaç gün önce buna benzer bir şey yaptı ve burada nasıl yaptığımı geçerli:

EXTENSIONS = ('.cpp','.hpp') 

for root, dirs, files in os.walk(top): 
    for file in files: 
     if file.endswith(EXTENSIONS): 
      #file which ends with extension type so do your thing! 

Umut etmek istediğin şey budur. Komut dosyasını github numaralı telefonumdan görebilirsiniz.

+0

geçişi Sam teşekkürler, yardımınız çok takdir! – pufAmuf

İlgili konular