Saya mencoba membuat skrip untuk mencantumkan semua direktori, subdirektori, dan file dalam direktori tertentu.
Saya mencoba ini:
import sys,os
root = "/home/patate/directory/"
path = os.path.join(root, "targetdirectory")
for r,d,f in os.walk(path):
for file in f:
print os.path.join(root,file)
Sayangnya itu tidak berfungsi dengan baik.
Saya mendapatkan semua file, tetapi bukan jalur lengkapnya.
Misalnya jika dir struct adalah:
/home/patate/directory/targetdirectory/123/456/789/file.txt
Ini akan mencetak:
/home/patate/directory/targetdirectory/file.txt
Yang saya butuhkan adalah hasil pertama. Bantuan apa pun akan sangat dihargai! Terima kasih.
print(os.path.join(path, name))
Untuk berjaga-jaga ... Mendapatkan semua file di direktori dan subdirektori yang cocok dengan beberapa pola (* .py misalnya):
sumber
Ini satu baris:
Pengulangan paling luar
val for sublist in ...
meratakan daftar menjadi satu dimensi. Thej
Loop mengumpulkan daftar setiap file basename dan bergabung ke jalan saat ini. Terakhir,i
loop mengulang semua direktori dan sub direktori.Contoh ini menggunakan jalur hard-code
./
dalamos.walk(...)
panggilan, Anda dapat menambahkan string jalur apa pun yang Anda suka.Catatan:
os.path.expanduser
dan / atauos.path.expandvars
dapat digunakan untuk string jalur seperti~/
Memperluas contoh ini:
Sangat mudah untuk menambahkan tes nama dasar file dan tes nama direktori.
Sebagai Contoh, menguji
*.jpg
file:Selain itu, tidak termasuk
.git
direktori:sumber
os.walk
melalui loop dirlisting manual, generator sangat bagus, gunakan saja.Tidak bisa berkomentar jadi menulis jawaban di sini. Ini adalah satu baris paling jelas yang pernah saya lihat:
sumber
Anda dapat melihat sampel yang saya buat ini. Ia menggunakan fungsi os.path.walk yang sudah usang, berhati-hatilah. Menggunakan daftar untuk menyimpan semua jalur file
sumber
Satu baris yang sedikit lebih sederhana:
sumber
Karena setiap contoh di sini hanya menggunakan
walk
(denganjoin
), saya ingin menunjukkan contoh yang bagus dan perbandingan denganlistdir
:Jadi seperti yang Anda lihat sendiri,
listdir
versinya jauh lebih efisien. (dan itujoin
lambat)sumber