Python2 et Python3 : J'ai vu plusieurs réponses ici qui sont beaucoup plus conscientes que la mienne, cependant, pour mes applications, je n'avais pas accès aux bibliothèques sur lesquelles ils s'appuyaient. C'est la solution que j'ai trouvée. De plus, pour mon application, j'avais besoin de connaître le chemin absolu de chaque fichier, je l'ai donc imprimé en même temps que le nom du fichier.
#!/usr/bin/env python
# -*- coding: utf_8 -*-
import os
PIPE = "│"
ELBOW = "└──"
TEE = "├──"
PIPE_PREFIX = "│ "
SPACE_PREFIX = " "
def list_files(startpath):
for root, dirs, files in os.walk(startpath):
break
tree = []
for i, file in enumerate(files):
if i == len(files)-1 and len(dirs) == 0:
joint = ELBOW
else:
joint = TEE
tree.append('{} {} : {}'.format(joint, file, os.path.join(root, file)))
for i, dir in enumerate(dirs):
if i == len(dirs)-1:
joint = ELBOW
space = SPACE_PREFIX
else:
joint = TEE
space = PIPE_PREFIX
tree.append('{} {}/'.format(joint, dir))
branches = list_files(os.path.join(root,dir))
for branch in branches:
tree.append('{}{}'.format(space, branch))
return tree
if __name__ == '__main__':
# Obtain top level directory path
cwd = os.getcwd()
tree = list_files(cwd)
string = '../{}/\n'.format(os.path.basename(cwd))
for t in tree:
string += '{}\n'.format(t)
string = string.replace('\n', '\n ')
print(string)
La sortie du script est la suivante :
../TEST_DIR/
├── test.txt : /usr/scripts/TEST_DIR/test.txt
├── a/
│ ├── 1.txt : /usr/scripts/TEST_DIR/a/1.txt
│ ├── 2.py : /usr/scripts/TEST_DIR/a/2.py
│ └── 3.bit : /usr/scripts/TEST_DIR/a/3.bit
├── b/
│ ├── bb/
│ │ ├── 1.txt : /usr/scripts/TEST_DIR/b/bb/1.txt
│ │ ├── 2.py : /usr/scripts/TEST_DIR/b/bb/2.py
│ │ ├── 3.bit : /usr/scripts/TEST_DIR/b/bb/3.bit
│ │ └── bb_copy/
│ │ ├── 1.txt : /usr/scripts/TEST_DIR/b/bb/bb_copy/1.txt
│ │ ├── 2.py : /usr/scripts/TEST_DIR/b/bb/bb_copy/2.py
│ │ ├── 3.bit : /usr/scripts/TEST_DIR/b/bb/bb_copy/3.bit
│ │ └── bb_copy/
│ │ ├── 1.txt : /usr/scripts/TEST_DIR/b/bb/bb_copy/bb_copy/1.txt
│ │ ├── 2.py : /usr/scripts/TEST_DIR/b/bb/bb_copy/bb_copy/2.py
│ │ └── 3.bit : /usr/scripts/TEST_DIR/b/bb/bb_copy/bb_copy/3.bit
│ └── bb_copy/
│ ├── 1.txt : /usr/scripts/TEST_DIR/b/bb_copy/1.txt
│ ├── 2.py : /usr/scripts/TEST_DIR/b/bb_copy/2.py
│ └── 3.bit : /usr/scripts/TEST_DIR/b/bb_copy/3.bit
└── c/
J'apprécierais tout conseil pour rendre ce script plus rationnel, plus conscient et plus robuste. J'espère que cela vous aidera.