[Python] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann

Für den Fall, dass Sie dateibaumähnliche Zeichen schreiben möchten, anstatt den eigentlichen Dateibaum zu schreiben. Zum Beispiel möchte ich einen Dateibaum in einen Artikel schreiben, der an Qiita gesendet wird. Wenn es sich jedoch um einen tatsächlichen Dateibaum handelt, werden zusätzliche Informationen hinzugefügt Verwenden Sie diese Option, wenn Sie nach Bedarf eine begrenzte Anzahl von Dateien und Ordnern schreiben möchten. Quellcode unten

Verwendung (Übersicht)

Erstellen Sie eine Datei und importieren Sie sie, bevor Sie sie verwenden.

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)

Ergebnis


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

Natürlich kann es von der Mitte aus angezeigt werden.

print(home)

Ergebnis


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

Wie benutzt man

Erstellen Sie zunächst das größte Verzeichnis. Das Argument ist der Verzeichnisname. Wenn hier pop = False ist, kann der automatische Druck zum Zeitpunkt von mkdir und touch später unterdrückt werden. Standard ist pop = True

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

Wenn Sie einen Ordner erstellen möchten, mkdir. Wenn Sie eine Datei erstellen möchten, berühren Sie sie.

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

Verwenden Sie cd, um Verzeichnisse zu verschieben (nur eines kann verschoben werden)

usr = root.cd('usr')

Danach mache mkdir und berühre auf die gleiche Weise.

usr.mkdir('home')

Drucken Sie mit der Verzeichnisinstanz, die Sie zuletzt anzeigen möchten.

print(root)

das ist alles.

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] Ich habe eine Klasse erstellt, die schnell einen Dateibaum schreiben kann
Ich habe mit Python eine Einstellungsdatei erstellt
Ich habe ein Paket erstellt, das morphologische Analysegeräte mit Python vergleichen kann
Ich habe ein Shuffle gemacht, das mit Python zurückgesetzt (zurückgesetzt) werden kann
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Ich möchte mit Python in eine Datei schreiben
[Python] Ich habe ein Dienstprogramm erstellt, das wie ein Pfad auf den Diktattyp zugreifen kann
Ich habe ein Modul PyNanaco erstellt, das Nanaco-Guthaben mit Python belasten kann
Ich habe versucht, eine Klasse zu erstellen, mit der Json in Python problemlos serialisiert werden kann
Ich habe mit Python ein Weihnachtsbaum-Beleuchtungsspiel gemacht
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
Ich habe ein Docker-Image erstellt, das FBX SDK Python von Node.js aus aufrufen kann
Ich habe einen Python-Text gemacht
unixtime ← → Ich habe versucht, eine Klasse zu erstellen, die die Datums- / Uhrzeitkonvertierung problemlos durchführt
Ich habe ein Plug-In erstellt, das "Daruma-san Fell" mit Minecraft ausführen kann
Ich habe einen Line-Bot mit Python gemacht!
Ich habe mit Python eine Lotterie gemacht.
Ich habe mit Python einen Daemon erstellt
[Python] Ich habe einen Line-Bot erstellt, der zufällig nach englischen Wörtern fragt
Wie kann ich ein gutes Programm schreiben?
Ich habe mit Python einen Zeichenzähler erstellt
Ich habe mit Python eine Hex-Map erstellt
Nachdem ich Python3 studiert hatte, machte ich einen Slackbot
Ich habe mit Python ein schurkenhaftes Spiel gemacht
Ich habe mit Python einen einfachen Blackjack gemacht
Ich habe mit Python einen Neuronensimulator erstellt
Ich habe eine generische Python-Projektvorlage erstellt
[Python] Ich habe einen Dekorateur gemacht, der keinen Nutzen zu haben scheint.
Ich habe eine Webanwendung in Python erstellt, die Markdown in HTML konvertiert
Ich habe in Python einen Discord-Bot erstellt, der übersetzt, wenn er reagiert
Ich habe ein Tool erstellt, das die Dekomprimierung mit CLI (Python3) etwas erleichtert.
[IOS] Ich habe ein Widget erstellt, das den Trend von Qiita in Pythonista3 anzeigt. [Python]
Ich habe ein Programm erstellt, um die Größe einer Datei mit Python zu überprüfen
[Python] Ich habe eine Funktion erstellt, die auch reguläre Ausdrücke verwenden kann, die Zeichenfolgen auf einmal ersetzen.
Ein Memo, das ich schnell in Python geschrieben habe
Ich habe eine GUI-App mit Python + PyQt5 erstellt
[Python / Tkinter] Eine Klasse, die einen scrollbaren Frame erstellt
Ich habe versucht, mit Python einen Twitter-Blocker für faule Mädchen zu machen
Ich habe eine Klasse in Python3 und Java geschrieben
[Python] Ich habe mit Tkinter einen Youtube Downloader erstellt.
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Python: Erstellen Sie eine Klasse, die entpackte Zuweisungen unterstützt
Ich habe ein Caesar-Kryptografieprogramm in Python erstellt.
Ich habe mit Python ein Bin-Picking-Spiel gemacht
Mattermost Bot mit Python gemacht (+ Flask)
Python Qiita API Wrapper "qiipy" gemacht
Klasse für PYTHON, die ohne Kenntnis von LDAP betrieben werden kann
Aus einem Buch, das Programmierer lernen können (Python): Klassendeklaration (öffentlich / privat usw.)
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
[Anfänger] Was passiert, wenn ich ein Programm schreibe, das in Python auf PHP läuft?
[Python] Ich habe einen LINE-Bot erstellt, der Gesichter erkennt und Mosaikverarbeitungen durchführt.
In Python habe ich einen LINE-Bot erstellt, der Polleninformationen aus Standortinformationen sendet.
Eine Geschichte, der ich nach der SFTP-Kommunikation mit Python verfallen war
Ich habe in Python ein Tool erstellt, das mit der rechten Maustaste auf eine Excel-Datei klickt und diese für jedes Blatt in Dateien unterteilt.