2013-04-22 32 views
6

Python bunların üzerinde döngü yaparken dosyaların nasıl düzenlendiğini bilen var mı? Sabit bir sırada (tercihen dosya adlarına göre alfanümerik olarak) bir klasördeki bazı dosyalar üzerinde döngü yapmam gerekiyor, ancak Python bunları rastgele bir sırayla çevriliyor gibi görünüyor.Python - dosyalar üzerinde döngü - sipariş

filelist = glob.glob(os.path.join(path, 'FV/*.txt')) 
for infile in filelist: 
    #do some fancy stuff 
    print str(infile) 

ve dosya adları gerçekten benim için çok açık değildir, bir sırayla yazdırılır: Şimdiye kadar bu kodu kullanıyorum.

Bu döngü için belirli bir siparişi önceden tanımlamanın basit bir yolu var mı? Teşekkürler! .. (glob.glob() malzemeleri sipariş etmek için hiçbir parametre alır alternatif gözönünde

+2

sadece bütünlük adına: Eğer sadece os.listdir dosyaları aracılığıyla yinelemek istiyorsanız, yeterlidir (... durumda, * .txt'yi genişletmek istediğiniz için). – born

cevap

11

Dokümanlarda görebildiğim kadarıyla, glob.glob() tanımlanmış bir siparişe sahip değildir. Bu göz önüne alındığında, emin olmak için en kolay yolu listesi size iade sıralamaktır:

filelist = glob.glob(os.path.join(path, 'FV/*.txt')) 
for infile in sorted(filelist): 
    #do some fancy stuff 
    print str(infile) 

Bu sadece sıralama dizeleri olarak irade - aradığınız basit sabit emir verir. Belirli bir siparişe ihtiyacınız varsa, sorted(), anahtar kelime argümanı olarak key alır, bu da sıralama düzeni veren bir işlevdir. Daha fazla bilgi için belgelere bakın (önceden bağlı).

+0

Beni bunun için dövün. Alfasayısal dizeler için varsayılan sıralama, doğru mu?+1 – BlackVegetable

+0

@BlackVegetable Evet, bu sadece basit bir sıralama olacak - açıkçası, istediğiniz şekilde sıralamak için bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '} '' tanımlayabilirsiniz –

+0

Belki de cevabınızı bu bilgiyi ve tersine bir not eklemek için düzenleyebilirsiniz. – BlackVegetable

-3
import os 
for root, dirs, files in os.walk(os.path.join(path, 'FV/'), topdown=True): 
    print root 
    print files.sort(reverse=True) 

, ben sadece bu yararlı olabilir parametreleri alır ve ben downvotes düşünüyorum .., walk() olduğunu glob.glob() bir alternatif sundu haksızlık olur ama herkesin kendi fikirlerine hakkı vardır. -)

+0

-1, Bu eşdeğer değil. 'walk()' tüm dosyaları verir ve alt dizinlere gider. Alt dizinlere gitmek istemiyorsanız, –

+0

kopması. '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' walk() 'kontrol etmenizi sağlar, açıkça istemediğiniz şeyleri yapmaz – Torxed

+2

Alt dizinlere yeniden girmek istemediğinizde 'walk' işlevini kullanmak oldukça aptalca. Ve '' yürüyüş'ün size iddia ettiğiniz gibi dosyaları alfabetik sırayla verdiğinin garantisi yoktur. – interjay