Saya ingin menavigasi dari direktori root ke semua direktori lain di dalam dan mencetak yang sama.
Ini kode saya:
#!/usr/bin/python
import os
import fnmatch
for root, dir, files in os.walk("."):
print root
print ""
for items in fnmatch.filter(files, "*"):
print "..." + items
print ""
Dan inilah O / P saya:
.
...Python_Notes
...pypy.py
...pypy.py.save
...classdemo.py
....goutputstream-J9ZUXW
...latest.py
...pack.py
...classdemo.pyc
...Python_Notes~
...module-demo.py
...filetype.py
./packagedemo
...classdemo.py
...__init__.pyc
...__init__.py
...classdemo.pyc
Di atas, .
dan ./packagedemo
direktori.
Namun, saya perlu mencetak O / P dengan cara berikut:
A
---a.txt
---b.txt
---B
------c.out
Di atas, A
dan B
adalah direktori dan sisanya adalah file.
Jawaban:
Ini akan memberi Anda hasil yang diinginkan
sumber
os.walk(u".")
karena path bisa Unicode.os.path.curdir
os.path.walk
untuk sementara waktu, jadios.walk
ini baru bagi saya! Kacang keren.basepath
sama dengan dalam kode Anda?coba ini:
Anda akan mendapatkan ini:
sumber
print(FileTreeMaker().make(args),file=tree)
tetapi itu memberi saya'charmap' codec can't encode characters in position 17-21: character maps to <undefined>
os.listdir()
. Milikmu jauh lebih baik; Saya tidak bisa mendapatkan rekursi dengan benar, hanya bekerja 2 atau 3 lapis. Pada akhirnya saya memutuskan untuk mencoba lagi dari awal denganos.walk()
, yang saya pikir akan jauh lebih cocok. Saya terkejut Anda tidak menggunakannya sama sekali di sini.Ada fungsi yang lebih cocok untuk ini dalam
os
paket. Tetapi jika Anda harus menggunakanos.walk
, inilah yang saya hasilkankeluaran:
sumber
os.listdir
tetapi solusi @ ajay mengalahkan itu.Anda dapat menggunakan
os.walk
, dan itu mungkin solusi yang paling mudah, tetapi di sini ada ide lain untuk dijelajahi:Anda mungkin mengenali dokumentasi berikut dari perintah TREE di terminal Windows:
sumber
Berjalan secara rekursif melalui direktori tempat Anda mendapatkan SEMUA file dari semua direktori di direktori saat ini dan Anda mendapatkan SEMUA direktori dari direktori saat ini - karena kode di atas tidak memiliki kesederhanaan (imho):
sumber
os.path.join(root, filename)
memberikan path lengkap ke file, bahkan jika file tersebut bersarang di beberapa direktori.Ini melakukannya untuk nama folder:
sumber
sumber
Diberi nama folder, berjalan melalui seluruh hierarki secara rekursif.
sumber
Akan menjadi cara terbaik
sumber
dir + d
, yang mungkin concat mereka tanpa pemisah direktori. Mungkin lebih baik digunakanos.path.join
untuk membuat direktori dengan nama fileCobalah ini; yang mudah
======== OUTPUT di bawah ini ========
sumber
Coba ini:
Di sini saya menganggap jalur Anda sebagai "." di mana root_file dan direktori lain ada di sana. Jadi, pada dasarnya kami hanya mengulangi seluruh pohon dengan menggunakan panggilan next (), karena os.walk kami hanya fungsi generatif. Dengan melakukan ini kita dapat menyimpan semua Direktori dan nama file masing-masing dalam dir_names dan file_names.
sumber
Anda juga bisa secara berjalan menelusuri folder dan mencantumkan semua kontennya menggunakan pathlib.Path ()
Keluaran:
sumber
sumber