Bagaimana cara mendapatkan daftar semua file (dan direktori) dalam direktori yang diberikan dengan Python?
572
Bagaimana cara mendapatkan daftar semua file (dan direktori) dalam direktori yang diberikan dengan Python?
Ini adalah cara untuk melintasi setiap file dan direktori di pohon direktori:
import os
for dirname, dirnames, filenames in os.walk('.'):
# print path to all subdirectories first.
for subdirname in dirnames:
print(os.path.join(dirname, subdirname))
# print path to all filenames.
for filename in filenames:
print(os.path.join(dirname, filename))
# Advanced usage:
# editing the 'dirnames' list will stop os.walk() from recursing into there.
if '.git' in dirnames:
# don't go into any .git directories.
dirnames.remove('.git')
for subdirname in dirnames: if subdirname != '.git'
Kamu bisa menggunakan
Untuk referensi dan lebih banyak fungsi os, lihat di sini:
sumber
os.scandir
sebagai gantinya, karena dalam banyak kasus itu memungkinkan Anda untuk mencegah panggilan sistem, memberikan speedup gratis (baik IPC dan IO lambat).os.path.isdir
.Inilah fungsi pembantu yang sering saya gunakan:
sumber
sumber
r'C:\temp'
lebih jelas dan lebih disukai daripada"C:\\temp"
Rawstrings lebih disukai daripada escaling backslash.Jika Anda membutuhkan kemampuan menggumpal, ada modul untuk itu juga. Sebagai contoh:
akan mengembalikan sesuatu seperti:
Lihat dokumentasi di sini .
sumber
Coba ini:
sumber
Untuk file dalam direktori kerja saat ini tanpa menentukan path
Python 2.7:
Python 3.x:
Terima kasih kepada Stam Kaly untuk komentar tentang python 3.x
sumber
os.listdir()
daftar elemen dalam direktori saat ini secara default! Jadi tidak perlu untukos.getcwd()
:)Implementasi rekursif
sumber
Saya menulis versi panjang, dengan semua opsi yang mungkin saya butuhkan: http://sam.nipl.net/code/python/find.py
Saya kira itu akan cocok di sini juga:
sumber
Ini pilihan lain.
Ini mengembalikan sebuah iterator dari objek os.DirEntry yang sesuai dengan entri (bersama dengan informasi atribut file) di direktori yang diberikan oleh path.
Contoh:
Menggunakan scandir () sebagai ganti listdir () dapat secara signifikan meningkatkan kinerja kode yang juga memerlukan tipe file atau informasi atribut file , karena objek os.DirEntry memaparkan informasi ini jika sistem operasi menyediakannya ketika memindai direktori. Semua metode os.DirEntry dapat melakukan panggilan sistem, tetapi is_dir () dan is_file () biasanya hanya memerlukan panggilan sistem untuk tautan simbolik; os.DirEntry.stat () selalu membutuhkan panggilan sistem di Unix tetapi hanya membutuhkan satu untuk tautan simbolis pada Windows.
Python Documents
sumber
Meskipun
os.listdir()
baik-baik saja untuk membuat daftar nama file dan dir, sering kali Anda ingin melakukan lebih banyak setelah Anda memiliki nama-nama itu - dan dengan Python3, pathlib membuat tugas-tugas lainnya menjadi sederhana. Mari kita lihat dan lihat apakah Anda menyukainya sama seperti saya.Untuk daftar isi dir, buat objek Path dan ambil iterator:
Jika kita ingin daftar nama saja:
Jika Anda hanya menginginkan dir:
Jika Anda ingin nama semua file conf di pohon itu:
Jika Anda ingin daftar file conf di pohon> = 1K:
Menyelesaikan jalur relatif menjadi mudah:
Menavigasi dengan Path cukup jelas (meskipun tidak terduga):
sumber
Satu liner yang bagus untuk daftar hanya file secara rekursif. Saya menggunakan ini di directive setup.py package_data saya:
Saya tahu itu bukan jawaban untuk pertanyaan itu, tetapi mungkin berguna
sumber
Untuk Python 2
Untuk Python 3
Untuk memfilter dan memetakan, Anda perlu membungkusnya dengan daftar ()
Rekomendasi sekarang adalah Anda mengganti penggunaan peta dan filter Anda dengan ekspresi generator atau pemahaman daftar:
sumber
Ini adalah versi Pythonic satu baris:
Kode ini mencantumkan path lengkap semua file dan direktori dalam nama direktori yang diberikan.
sumber
Saya tahu ini adalah pertanyaan lama. Ini adalah cara yang rapi yang saya temui jika Anda menggunakan mesin liunx.
sumber
sumber
FYI Tambahkan filter ekstensi atau os file impor ext
sumber
Jika saya pikir saya akan memasukkan ini. Cara sederhana dan kotor untuk melakukan pencarian wildcard.
sumber
Kode di bawah ini akan mencantumkan direktori dan file dalam direktori
sumber
Yang bekerja dengan saya adalah jenis versi modifikasi dari jawaban Saleh di atas.
Kode tersebut adalah sebagai berikut:
"dir = 'given_directory_name' filenames = [os.path.abspath (os.path.join (dir, i)) untuk saya di os.listdir (dir)]"
sumber