Benennen Sie Dateien um und erteilen Sie die Berechtigung zur Ausführung von Python-Skripten

In diesem Tutorial zu Python sehen wir ein Skript, das das Erscheinungsbild von .txt durch .sh in den Dateien ändert und ihnen Ausführungsberechtigungen für den Benutzer erteilt. Für diese Aufgabe werden wir Module verwenden, die wir bereits in Python haben. Das Skript ist sowohl für Version 2.X als auch für 3.X gültig. Obwohl sich die Ausgabe geringfügig unterscheidet, ändert sich das Verhalten nicht, wie wir später sehen werden.

Hinweis
Das zu implementierende Skript ist für die Verwendung unter UNIX-Betriebssystemen vorgesehen.

Für das Beispiel habe ich einen Ordner mit mehreren Dateien erstellt, einige haben die Erweiterung .txt, andere nicht. Außerdem gibt es eine Datei namens test1.txt mit einem kleinen Befehl: ls -l . Es soll überprüft werden, ob es tatsächlich ausgeführt wird, da die restlichen Dateien “klebrig” sind, da sie keine Daten enthalten. Der Inhalt des Ordners ist in der folgenden Abbildung zu sehen:

rename_python_1.jpg

Wenn wir ein ls -l machen , sehen wir, dass keiner Ausführungsberechtigungen hat:

rename_python_2.jpg

Lassen Sie uns nun fortfahren, um den vollständigen Code zu sehen, und unten wird er erklärt.

 Import OS, Sys, Stat aus dem Subprozess-Import Popen, PIPE if (len (sys.argv) <2): drucken ("Die zu durchsuchende Route ist erforderlich") sys.exit (0) elif (nicht os.path.exists (sys.argv [1])): print ("Nicht gefunden:" + str (sys.argv [1])) sys.exit (0) process = Popen (["find", sys.argv [1]], stdout = PIPE, stderr = PIPE) wenn nicht process.stderr.read (): num = 0 für Zeile in process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" in lineNew und os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, neu) os.chmod (neu, stat.S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 print ("Arbeit erledigt, geändert", num, "Dateien") sonst: drucken ("Fehler") 

Beginnen wir mit der schrittweisen Erklärung des Codes. Als Erstes importieren wir die Module, die wir benötigen.

 Import OS, Sys, Stat aus dem Subprozess-Import Popen, PIPE 

Dann prüfen wir, ob ein Argument an uns übergeben wurde und ob es sich um eine Route handelt, um festzustellen, ob wir mit dem Skript fortfahren oder nicht.

 if (len (sys.argv) <2): drucken ("Die zu durchsuchende Route ist erforderlich") sys.exit (0) elif (nicht os.path.exists (sys.argv [1])): print ("Nicht gefunden:" + str (sys.argv [1])) sys.exit (0) 

Um Popen aus dem Unterprozessmodul weiter zu verwenden, erfassen wir die Standardausgabe und die Fehlerausgabe. Dies geschieht mit PIPE , einer Pipeline. Jetzt können wir die Pipe lesen, als wäre es eine Datei.

 process = Popen (["find", sys.argv [1]], stdout = PIPE, stderr = PIPE) 

Um zu wissen, ob wir fortfahren sollen, prüfen wir, ob ein Fehler (in process.stderr gespeichert) vorliegt.

 wenn nicht process.stderr.read (): 

Wenn ein Fehler auftritt, wird er auf dem Fehlerbildschirm angezeigt (dies ist der Zweig else, für den es keine weiteren Erklärungen gibt), und das Programm wird beendet. Wenn nicht, lesen wir aus der Standardausgabepipe ( stdout ). Wir machen das Zeile für Zeile mit einem für, wir müssen die Ausgabe dekodieren, in diesem Fall entscheide ich mich für UTF-8, weil mit ASCII beispielsweise Fehler bei Tildes auftreten würden.

See also  Laden Sie den gesamten Wikipedia-Inhalt herunter

Wenn wir uns die for-Schleife weiter ansehen, stellen wir fest, dass die gelesene Zeile TXT enthält. In diesem Fall prüfen wir auch, ob es sich um eine Datei handelt (wir sind nicht daran interessiert, einen Ordner zu ändern, der TXT enthält). Wenn dies zutrifft, verwenden wir die Ersetzungsfunktion von Python, um .txt in .sh zu ändern, und geben Ihnen dann mit der chmod-Funktion des Moduls Berechtigungen, die das Ausführen, Lesen und Schreiben für den Benutzer, Lesen und Ausführen für die Gruppe und nichts sind für andere. Wie Sie sehen, verwenden wir das stat- Modul.

Die Variable num, die Sie im Code gesehen haben, wird einfach verwendet, um die Anzahl der Dateien zu verfolgen, die wir ändern, und um am Ende Informationen auf dem Bildschirm anzeigen zu können.

 für Zeile in process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" in lineNew und os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, neu) os.chmod (neu, stat.S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 

Am Ende der for-Schleife zeigen wir die Informationen an, über die wir sprechen. Hier finden wir den Unterschied zwischen Version 2.x und 3.x, da die Kommas vor und nach num in Version 2 Teil von sind eine Liste und in 3 zeigt es Ihnen normal (ohne Liste).

 print ("Arbeit erledigt, geändert", num, "Dateien") 

Dies kann so geändert werden, dass es mit dem + gleich interpretiert wird und die Variable num mit der Funktion str in den String konvertiert wird, oder durch das % , dann werden die 2 Codes gesetzt:

 print ("Arbeit erledigt, geändert" + str (num) + "files") print ("Arbeit erledigt,% d Dateien geändert"% num) 

Es war von der ersten Form übrig geblieben, dass es zwischen den Versionen von Python Änderungen gibt (diese können so klein sein wie in diesem Fall, aber vielleicht funktioniert etwas, das in Version 3 funktioniert, nicht in 2 und umgekehrt).

See also  So übersetzen Sie ein Word 2016-Textdokument in eine andere Sprache

Jetzt und fast zum Abschluss des Tutorials werden wir den Code ausführen und sehen, wie er funktioniert. Dann lasse ich zwei Abbilder der Ausführung mit Python 3.x im ersten und im zweiten Python 2.x:

rename_python_3.jpg

renombrar_python_6.jpg

Hier schätzen wir die geringen Unterschiede. Nun wollen wir sehen, wie der Testordner, den wir zuvor gesehen haben, aussieht:

rename_python_4.jpg

Wir haben die 4 Dateien geändert, die .txt hatten und jetzt .sh haben. Es scheint, dass nur die Datei test1.sh ausführbar ist. Dies liegt daran, dass der Rest keine Daten enthält. Wir werden die Datei test1.sh ausführen. Das Einzige, was wir tun müssen, ist, das von uns angegebene ls -l zu starten. Auf diese Weise können wir die Berechtigungen besser erkennen.

renombrar_python_5.jpg

Bis hierher kommt das Tutorial, falls es von Interesse ist, wird es neben einen Link zu einem anderen Tutorial auf Python gestellt : Suche nach Name des Archivs .

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *