[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers

Pour lorsque vous voulez écrire des caractères de type arborescence de fichiers au lieu d'écrire l'arborescence de fichiers réelle. Par exemple, je souhaite écrire une arborescence de fichiers dans un article publié sur Qiita, mais s'il s'agit d'une arborescence de fichiers réelle, des informations supplémentaires seront incluses, donc À utiliser lorsque vous souhaitez écrire un nombre limité de fichiers et de dossiers selon les besoins. Code source en bas

Comment utiliser (aperçu)

Créez un fichier et importez-le avant de l'utiliser.

from filename import directory

root = directory('root')
root.mkdir('usr')
root.mkdir('Applications')
usr = root.cd('usr')
usr.mkdir('username')
home = usr.cd('username')
home.mkdir('Documents')
home.mkdir('Music')
home.mkdir('Downloads')
doc = home.cd('Documents')
doc.touch('document.pdf')
home.mkdir('Picures')
pic = home.cd('Picures')
pic.touch('Images.png')
pic.touch('icon.svg')

print(root)

résultat


root/
  |__ Applications/
  |__ usr/
        |__ username/
              |__ Documents/
              |     |_  document.pdf
              |__ Downloads/
              |__ Music/
              |__ Picures/
                    |_  icon.svg
                    |_  Images.png

Bien sûr, il peut être affiché à partir du milieu.

print(home)

résultat


username/
  |__ Documents/
  |     |_  document.pdf
  |__ Downloads/
  |__ Music/
  |__ Picures/
        |_  icon.svg
        |_  Images.png

Comment utiliser

Commencez par créer le plus grand répertoire. L'argument est le nom du répertoire. Si pop = False ici, l'impression automatique au moment de mkdir et touch peut être supprimée plus tard. la valeur par défaut est pop = True

root = directory('root',pop=False)

Si vous souhaitez créer un dossier, mkdir. Si vous souhaitez créer un fichier, appuyez dessus.

root.mkdir('usr')
root.mkdir('Applications')
root.touch('config')

Utilisez cd pour déplacer les répertoires (un seul peut être déplacé)

usr = root.cd('usr')

Après cela, faites mkdir et touchez de la même manière.

usr.mkdir('home')

Imprimez avec l'instance de répertoire que vous souhaitez afficher en dernier.

print(root)

c'est tout.

code

filetree


class directory:
    def __init__(self,name,parent=None,pop=True):
        self.name = name
        self.parent = parent
        self.childs = []
        self.files = []
        self.pop = pop

    def mkdir(self,name):
        if name in map(lambda x:x.name,self.childs):
            print('this directory have same name')
        else:
            self.childs.append(directory(name,self))
        self.childs.sort(key=lambda x:x.name.lower())
        if self.pop:
            if self.parent:
                print(self.parent.__str__())
            else:
                print(self.__str__())

    def cd(self,name):
        for i in self.childs:
            if i.name == name:
                return i
        raise IndexError(name)

    def touch(self,name):
        if name in self.files:
            print('this directory have same name')
        else:
            self.files.append(name)
        self.files.sort(key=str.lower)
        if self.pop:
            if self.parent:
                print(self.parent.__str__())
            else:
                print(self.__str__())

    def __str__(self):
        word = ''
        word += self.name
        word += '/\n'
        for i in range(len(self.childs)):
            addlines = '  |__ '
            addlines += self.childs[i].__str__()
            addlines = addlines.splitlines()
            word += addlines[0]
            word += '\n'
            if self.files or i+1 < len(self.childs):
                word += '\n'.join(map(lambda x: '  |   ' + x,addlines[1:]))
            else:
                word += '\n'.join(map(lambda x: '      ' + x,addlines[1:]))
            if self.childs[i].childs or self.childs[i].files:
                word += '\n'
        for j in self.files:
            word += '  |_  '
            word += j
            word += '\n'
        return word

Recommended Posts

[python] J'ai créé une classe qui peut écrire rapidement une arborescence de fichiers
J'ai créé un fichier de configuration avec Python
J'ai fait un package qui peut comparer des analyseurs morphologiques avec Python
J'ai fait un shuffle qui peut être réinitialisé (inversé) avec Python
J'ai créé un fichier de dictionnaire python pour Neocomplete
Je veux écrire dans un fichier avec Python
[Python] J'ai créé un utilitaire qui peut accéder au type dict comme un chemin
J'ai fait un module PyNanaco qui peut charger des crédits nanaco avec python
J'ai essayé de créer une classe qui peut facilement sérialiser Json en Python
J'ai fait un jeu d'éclairage de sapin de Noël avec Python
J'ai créé une VM qui exécute OpenCV pour Python
J'ai créé une image Docker qui peut appeler FBX SDK Python à partir de Node.js
J'ai fait un texte Python
unixtime ← → J'ai essayé de créer une classe qui effectue facilement la conversion datetime
J'ai créé un plug-in qui peut faire "Daruma-san tombé" avec Minecraft
J'ai fait un Line-bot avec Python!
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
Comment puis-je écrire un bon programme?
J'ai fait un compteur de caractères avec Python
J'ai fait une carte hexadécimale avec Python
Après avoir étudié Python3, j'ai créé un Slackbot
J'ai fait un jeu rogue-like avec Python
J'ai fait un simple blackjack avec Python
J'ai fait un simulateur de neurones avec Python
J'ai créé un modèle de projet Python générique
[Python] J'ai fait un décorateur qui ne semble pas avoir d'utilité.
J'ai créé une application Web en Python qui convertit Markdown en HTML
J'ai créé un bot Discord en Python qui se traduit quand il réagit
J'ai créé un outil qui facilite un peu la décompression avec CLI (Python3)
[IOS] J'ai créé un widget qui affiche la tendance de Qiita dans Pythonista3. [Python]
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
[Python] J'ai créé une fonction qui peut également utiliser des expressions régulières qui remplacent toutes les chaînes de caractères à la fois.
Un mémo que j'ai écrit un tri rapide en Python
J'ai créé une application graphique avec Python + PyQt5
[Python / Tkinter] Une classe qui crée un cadre défilable
J'ai essayé de créer un bloqueur de filles pourries sur Twitter avec Python ①
J'ai écrit une classe en Python3 et Java
[Python] J'ai créé un téléchargeur Youtube avec Tkinter.
J'ai essayé de lire un fichier CSV en utilisant Python
Python: créer une classe qui prend en charge l'affectation décompressée
J'ai créé un programme cryptographique César en Python.
J'ai fait un jeu de cueillette avec Python
Made Mattermost Bot avec Python (+ Flask)
Création du wrapper d'API Qiita Python "qiipy"
Classe pour PYTHON qui peut être utilisée sans connaître LDAP
À partir d'un livre que les programmeurs peuvent apprendre (Python): Déclaration de classe (public / privé, etc.)
Je souhaite créer une file d'attente prioritaire pouvant être mise à jour avec Python (2.7)
J'ai enregistré PyQCheck, une bibliothèque qui peut effectuer QuickCheck avec Python, dans PyPI.
[Débutant] Que se passe-t-il si j'écris un programme qui s'exécute sur php en Python?
[Python] J'ai créé un LINE Bot qui détecte les visages et effectue le traitement de la mosaïque.
En Python, j'ai créé un LINE Bot qui envoie des informations sur le pollen à partir des informations de localisation.
Une histoire à laquelle j'étais accro après la communication SFTP avec python
J'ai créé un outil en Python qui clique avec le bouton droit sur un fichier Excel et le divise en fichiers pour chaque feuille.