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.