Jak wyświetlić katalogi i podkatalogi?

0

Znalazłem gdzieś w necie takie zadanie:

Program wyświetla (najlepiej z odpowiednim wcięciem) podkatalogi wszystkich wyświetlanych katalogów. Np.
$ ./my_ls.py kat
kat1
kat2
podkat21
podkat22
kat3
podkat31
podpodkat311
podkat32
podpodkat321
podpodkat322
kat4

Uczę się pythona i stwierdziłem, że robienie zadań to najlepsze, co może być.

Napisałem taki kod: (jednak on 'nie działa' - źle wyświetla mi katalogi):

# -*- coding: utf-8 -*-
#!/usr/bin/env python

import os
from os import sys

def main() :
    if len(sys.argv) > 1 :
        katalog = sys.argv[1]
        zawartosc = open('zawartosc_katalogu.txt', 'w')
        if os.path.isdir(katalog) :
            for katalogi in os.listdir(katalog) :
                zawartosc.write(os.path.join(katalog, katalogi)+'\n')
                if os.path.isdir(katalogi) :
                    for k in os.listdir(katalogi) :
                        zawartosc.write('\t'+os.path.join(k, katalog)+'\n')
        zawartosc.close()
                    
if __name__ == "__main__":
    main()
0

Twój kod (po poprawce) wyświetla tylko dwa poziomy, jeżeli chcesz wszystkie poziomy to skorzystaj z rekurencji lub funkcji walk w module os.

# -*- coding: utf-8 -*-
#!/usr/bin/env python
 
import os
from os import sys
 
def main() :
    if len(sys.argv) > 1 :
        katalog = sys.argv[1]
        zawartosc = open('zawartosc_katalogu.txt', 'w')
        if os.path.isdir(katalog) :
            for katalogi in os.listdir(katalog) :
                zawartosc.write(os.path.join(katalog, katalogi)+'\n')
                if os.path.isdir(os.path.join(katalog, katalogi)) :
                    for k in os.listdir(os.path.join(katalog, katalogi)) :
                        zawartosc.write('\t'+os.path.join(k, katalog)+'\n')
        zawartosc.close()
 
if __name__ == "__main__":
    main()

1 użytkowników online, w tym zalogowanych: 0, gości: 1