Dalam Python, saya hanya ingin mendaftar semua file di direktori saat ini saja. Saya tidak ingin file terdaftar dari sub direktori atau orang tua.
Tampaknya ada solusi serupa di luar sana, tetapi mereka tampaknya tidak bekerja untuk saya. Berikut cuplikan kode saya:
import os
for subdir, dirs, files in os.walk('./'):
for file in files:
do some stuff
print file
Misalkan saya memiliki 2 file, holygrail.py dan Tim di dalam direktori saya saat ini. Saya memiliki folder juga dan itu berisi dua file - sebut saja Arthur dan Lancelot - di dalamnya. Ketika saya menjalankan skrip, inilah yang saya dapatkan:
holygrail.py
Tim
Arthur
Lancelot
Saya senang dengan holygrail.py dan Tim. Tapi dua file, Arthur dan Lancelot, saya tidak mau terdaftar.
[os.path.join(path_base,f) for f in os.listdir(path_base) if os.path.isfile(os.path.join(path_base,f))]
files = [f for f in os.listdir("/somedir") if os.path.isfile(os.path.join("/somedir", f))]'
Anda dapat menggunakan
os.listdir
untuk tujuan ini. Jika Anda hanya menginginkan file dan bukan direktori , Anda dapat memfilter hasilnya menggunakanos.path.isfile
.contoh:
atau
sumber
sumber
Anda bisa menggunakannya
os.scandir()
. Fungsi baru di stdlib dimulai dari Python 3.5.Lebih cepat dari
os.listdir()
.os.walk()
mengimplementasikanos.scandir()
.sumber
ini bisa dilakukan dengan os.walk ()
python 3.5.2 diuji;
hapus baris dirs.clear () dan file-file dalam sub folder dimasukkan lagi.
perbarui dengan referensi ;
os.walkan didokumentasikan di sini dan berbicara tentang daftar tiga yang dibuat dan efek topdown.
.clear () didokumentasikan di sini untuk mengosongkan daftar
jadi dengan menghapus daftar yang relevan dari os.walk Anda dapat mempengaruhi hasilnya untuk kebutuhan Anda.
sumber
Anda dapat meningkatkan kode ini dengan
del dirs[:]
yang akan seperti berikut.Atau bahkan lebih baik jika Anda bisa mengarahkan os.walk dengan direktori kerja saat ini.
sumber
alih-alih
os.walk
, gunakan sajaos.listdir
sumber
Anda dapat menggunakan modul pathlib.
sumber