Bagaimana saya bisa mendaftar konten direktori dengan Python?


Jawaban:



52

Satu arah:

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

Cara lain :

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

Contoh ditemukan di sini .

The glob.globmetode di atas tidak akan daftar file yang tersembunyi.

Karena saya awalnya menjawab pertanyaan ini bertahun-tahun yang lalu, pathlib telah ditambahkan ke Python. Cara yang saya sukai untuk mendaftar direktori sekarang biasanya melibatkan iterdirmetode pada Pathobjek:

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

Akankah glob.glob mendaftarkan file-file yang disembunyikan (saya berasumsi maksud Anda .XYZfile dalam konteks sistem file Unix), bila digunakan glob.glob("/home/username/www/.*")?
Andy Finkenstadt

Ya maksud saya file dimulai dengan titik. Contoh yang Anda berikan akan berfungsi untuk mencocokkan file yang tersembunyi (dan hanya file yang tersembunyi).
Trey Hunner

Saya baru saja mengimpor glob dan menggunakan glob.glob (r'c: \ users ') tetapi hanya dikembalikan['c:\\users']
Musixauce3000

1
@ Musixauce3000: Anda ingin melakukannya glob.glob(r'c:\users\*')(glob tidak benar-benar mendaftar direktori, tetapi memperluas tanda bintang dan semacamnya yang menyelesaikan tugas serupa).
Trey Hunner

38

os.walk dapat digunakan jika Anda membutuhkan rekursi:

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.globatau os.listdirakan melakukannya.


import globENTER glob.glob(r'c:\users')ENTER sepertinya hanya kembali ['c:\\users']. Mengapa demikian? Saya ingin menggunakan glob.glob karena seperti yang ditunjukkan oleh pengguna lain, itu seharusnya mengembalikan isi direktori sementara juga mengabaikan file tersembunyi. Ini penting.
Musixauce3000

karena Anda harus menentukan wildcard dengan glob:glob.glob(r'c:\users\*')
Jean-François Fabre

14

The osmodul menangani semua itu.

os.listdir(path)

Kembali daftar yang berisi nama-nama entri dalam direktori yang diberikan oleh path. Daftar ini dalam urutan acak. Itu tidak termasuk entri khusus '.' dan '..' bahkan jika mereka ada di direktori.

Ketersediaan: Unix, Windows.


4

Di Python 3.4+, Anda dapat menggunakan pathlibpaket baru :

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

Path.iterdir()mengembalikan iterator, yang dapat dengan mudah diubah menjadi list:

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

3

Sejak Python 3.5, Anda dapat menggunakan os.scandir.

Perbedaannya adalah ia mengembalikan entri file bukan nama. Pada beberapa OS seperti windows, itu berarti Anda tidak perlu os.path.isdir/filetahu apakah itu file atau tidak, dan itu menghemat waktu CPU karena statsudah dilakukan saat memindai dir di Windows:

contoh untuk mendaftar direktori dan mencetak file lebih besar dari max_valuebyte:

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

(baca jawaban saya berdasarkan kinerja yang luas di sini )


2

Kode di bawah ini akan mencantumkan direktori dan file dalam direktori. Yang lainnya adalah os.walk

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.