Python'da bir dizinin içeriğini nasıl listeleyebilirim?


Yanıtlar:



52

Tek yön:

import os
os.listdir("/home/username/www/")

Başka bir yol :

glob.glob("/home/username/www/*")

Burada bulunan örnekler .

Yukarıdaki glob.globyöntem gizli dosyaları listelemez.

Aslında bu soruyu yıllar önce yanıtladığımdan beri, Python'a pathlib eklendi. Bir dizini listelemek için tercih ettiğim iterdiryöntem artık genellikle Pathnesneler üzerindeki yöntemi içeriyor :

from pathlib import Path
print(*Path("/home/username/www/").iterdir(), sep="\n")

Glob.glob .XYZ, birlikte kullanıldığında gizli dosyaları ( Unix dosya sistemi bağlamındaki dosyaları kastettiğini varsayarım) listeler mi glob.glob("/home/username/www/.*")?
Andy Finkenstadt

Evet, nokta ile başlayan dosyaları kastediyorum. Verdiğiniz örnek gizli dosyaları (ve yalnızca gizli dosyaları) eşleştirmek için kullanılabilir.
Trey Hunner

Ben sadece glob ithal ve glob.glob (r'c: \ users ') kullandım ama sadece döndü['c:\\users']
Musixauce3000

1
@ Musixauce3000: Yapmak isteyeceksiniz glob.glob(r'c:\users\*')(glob aslında dizinleri listelemez, ancak yıldızları genişletir ve benzer bir görevi yerine getiren böyle).
Trey Hunner

38

os.walk özyineleme gerekiyorsa kullanılabilir:

import os
start_path = '.' # current directory
for path,dirs,files in os.walk(start_path):
    for filename in files:
        print os.path.join(path,filename)

18

glob.globya os.listdirda yapacak.


import globENTER glob.glob(r'c:\users')ENTER yalnızca geri dönüyor gibi görünüyor ['c:\\users']. Neden? Ben glob.glob kullanmak istiyorum çünkü diğer kullanıcıların işaret ettiği gibi, sözde gizli dosyaları göz ardı ederken bir dizinin içeriğini döndürür. Bu önemli.
Musixauce3000

çünkü şunlarla bir joker karakter belirtmeniz gerekir glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

osModül kolları tüm bu şeyler.

os.listdir(path)

Dizin yolu tarafından verilen girdilerin adlarını içeren bir liste döndürür. Liste keyfi sıradadır. '.' Özel girişlerini içermez. ve '..' dizinde bulunsalar bile.

Kullanılabilirlik: Unix, Windows.


4

Python 3.4+ sürümünde yeni pathlibpaketi kullanabilirsiniz :

from pathlib import Path
for path in Path('.').iterdir():
    print(path)

Path.iterdir()kolayca aşağıdakine dönüştürülebilen bir yineleyici döndürür list:

contents = list(Path('.').iterdir())

3

Python 3.5'ten beri kullanabilirsiniz os.scandir.

Fark, isimleri değil dosya girişlerini döndürmesidir . Windows gibi bazı işletim sistemlerinde, bunun os.path.isdir/filebir dosya olup olmadığını bilmeniz gerekmediği anlamına gelir ve statWindows'da dir tarama yapılırken zaten CPU zamanından tasarruf sağlar :

bir dizini listeleme ve max_valuebayttan daha büyük dosyaları yazdırma örneği :

for dentry in os.scandir("/path/to/dir"):
    if dentry.stat().st_size > max_value:
       print("{} is biiiig".format(dentry.name))

(performansa dayalı kapsamlı bir cevabımı burada okuyun )


2

Aşağıdaki kod, dizinleri ve dizin içindeki dosyaları listeler. Diğeri o. Yürüyüş

def print_directory_contents(sPath):
        import os                                       
        for sChild in os.listdir(sPath):                
            sChildPath = os.path.join(sPath,sChild)
            if os.path.isdir(sChildPath):
                print_directory_contents(sChildPath)
            else:
                print(sChildPath)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.