Chcę przejść z katalogu głównego do wszystkich innych katalogów i wydrukować to samo.
Oto mój kod:
#!/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 ""
A oto moje O / P:
.
...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
Powyżej .
i./packagedemo
są katalogami.
Jednak muszę wydrukować O / P w następujący sposób:
A
---a.txt
---b.txt
---B
------c.out
Powyżej, A
i B
są katalogi, a reszta to pliki.
Odpowiedzi:
To da pożądany rezultat
źródło
os.walk(u".")
ponieważ ścieżki mogą być w Unicode.os.path.curdir
os.path.walk
przez jakiś czas, więcos.walk
jest dla mnie nowy! Fajna fasola.basepath
równe w Twoim kodzie?Spróbuj tego:
otrzymasz to:
źródło
print(FileTreeMaker().make(args),file=tree)
ale daje mi to'charmap' codec can't encode characters in position 17-21: character maps to <undefined>
os.listdir()
. Twój jest o wiele lepszy; Nie mogłem poprawnie uzyskać rekursji, działała tylko na 2 lub 3 warstwach. W końcu zdecydowałem się spróbować ponownie od zeraos.walk()
, co moim zdaniem byłoby o wiele bardziej odpowiednie. Dziwię się, że w ogóle go tu nie użyłeś.W
os
pakiecie są do tego bardziej odpowiednie funkcje . Ale jeśli musisz użyćos.walk
, oto co wymyśliłemwynik:
źródło
os.listdir
ale rozwiązanie @ ajay to przebija.Możesz użyć
os.walk
i jest to prawdopodobnie najłatwiejsze rozwiązanie, ale oto inny pomysł do zbadania:Następującą dokumentację można rozpoznać po poleceniu TREE w terminalu systemu Windows:
źródło
Rekurencyjne przechodzenie przez katalog, w którym otrzymujesz WSZYSTKIE pliki ze wszystkich katalogów w bieżącym katalogu i WSZYSTKIE katalogi z bieżącego katalogu - ponieważ powyższe kody nie mają prostoty (imho):
źródło
os.path.join(root, filename)
podaje pełną ścieżkę do pliku, nawet jeśli plik jest zagnieżdżony w kilku katalogach.Robi to dla nazw folderów:
źródło
źródło
Mając nazwę folderu, przejdź rekurencyjnie przez całą jego hierarchię.
źródło
Byłby to najlepszy sposób
źródło
dir + d
, co może łączyć je bez separatora katalogów. Prawdopodobnie lepiej jest używaćos.path.join
do łączenia katalogów z nazwami plikówSpróbuj tego; Łatwy
======== WYJŚCIE poniżej ========
źródło
Spróbuj tego:
Tutaj przyjmuję twoją ścieżkę jako „”. w którym znajduje się root_file i inne katalogi. Tak więc, w zasadzie po prostu iterujemy po drzewie używając wywołania next (), ponieważ nasz os.walk jest tylko funkcją generującą. W ten sposób możemy zapisać wszystkie nazwy katalogów i plików odpowiednio w nazwach_katalogów i nazwach_plików.
źródło
Możesz również rekurencyjnie przejść przez folder i wyświetlić całą jego zawartość za pomocą pathlib.Path ()
Wynik:
źródło
źródło