Gi nytt navn til filer og gi Python -skriptkjøringstillatelse

Innholdsfortegnelse

I dette Opplæring i Python la oss se et skript som vil endre utseendet på .txt til .sh i filer, og det vil også gi kjøringstillatelser for brukeren. For denne oppgaven skal vi bruke moduler som vi allerede har i Python, skriptet er gyldig for både versjon 2.X og 3.X, selv om utgangen er litt annerledes, endres ikke oppførselen, som vi vil se senere.

MerkSkriptet som skal implementeres er for bruk på UNIX -operativsystemer.

For eksempel har jeg opprettet en mappe med flere filer, noen har en .txt -utvidelse, og andre ikke, og det er også en fil som heter test1.txt som har en liten kommando: ls -l. Det er for å bekrefte at det faktisk er utført, siden resten er "klissete" siden de ikke inneholder data. Innholdet i mappen kan sees på følgende bilde:

Hvis vi gjør en ls -l vi ser at ingen har kjøringstillatelser:

Nå skal vi se den komplette koden, og den vil bli forklart nedenfor.

 import os, sys, stat fra delprosessen import Popen, PIPE if (len (sys.argv) <2): print ("banen å se etter er påkrevd") sys.exit (0) elif (ikke os.path.exists (sys.argv [1])): print ("Ikke funnet:" + str (sys.argv [1])) sys.exit (0) prosess = Popen (["finn", sys.argv [1]] , stdout = PIPE, stderr = PIPE) hvis ikke process.stderr.read (): num = 0 for linje i process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () hvis (".txt" i lineNew og os.path.isfile (lineNew)): new = lineNew.replace (". txt", ". sh") os.rename (lineNew, new) os.chmod (ny, stat. S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1 utskrift ("Work done, modified", num, "files") else: print ("Error")
Vi skal begynne med forklaringen på koden trinn for trinn, det første vi gjør er å importere modulene vi kommer til å trenge.
 import os, sys, stat fra delprosess import Popen, PIPE
Deretter vil vi sjekke om vi har fått et argument, og det er en rute, for å se om vi fortsetter med skriptet eller ikke.
 if (len (sys.argv) <2): print ("Stien du skal søke etter er påkrevd") sys.exit (0) elif (ikke os.path.exists (sys.argv [1])): print ( "Ikke funnet:"+ str (sys.argv [1])) sys.exit (0)
For å fortsette bruker vi Popen av modulen delprosess, vi fanger standardutgangen og feilutgangen, vi gjør dette ved hjelp av RØR, Et rør. Nå kan vi lese fra rørledningen som om det var en fil.
 prosess = Popen (["finn", sys.argv [1]], stdout = PIPE, stderr = PIPE)
For å vite om vi skal fortsette, sjekker vi om det er en feil (lagret i process.stderr) med følgende hvis:
 hvis ikke process.stderr.read ():
Hvis det er en feil, vises den på feilskjermen (dette er for den andre grenen, som ikke har noen ytterligere forklaring), og programmet avsluttes. Hvis ikke, er det vi skal gjøre å lese fra standardutgangsrøret (stdout). Vi gjør det linje for linje med en for, vi må dekode utgangen, i dette tilfellet velger jeg UTF-8, siden det med ASCII ville gi feil med aksenter for eksempel.

Hvis vi fortsetter å se på for -løkken, ser vi at vi sjekker om linjen som er lest inneholder .txt, i så fall er det også sjekket at det er en fil (vi er ikke interessert i å endre en mappe som inneholder .txt). Hvis dette er sant, bruker vi funksjonen erstatte av Python for å endre .txt til .sh, og deretter med modulen chmod gir vi deg tillatelser, som vil være kjøring, lesing og skriving for brukeren, lesing og utførelse for gruppen og ingenting for andre. Som du kan se bruker vi stat -modulen.

Variabelen num som du vil ha sett i koden brukes ganske enkelt til å holde oversikt over antall filer vi endrer og dermed til slutt for å kunne vise informasjon på skjermen.

 for line in process.stdout.readlines (): lineNew = line.decode ("UTF-8"). strip () if (". txt" in lineNew and os.path.isfile (lineNew)): new = lineNew. Erstatt (". txt", ". sh") os.rename (lineNew, new) os.chmod (ny, stat.S_IXUSR + stat.S_IRUSR + stat.S_IWUSR + stat.S_IRGRP + stat.S_IXGRP) num + = 1
På slutten av for loop, det vi gjør er å vise informasjonen vi snakker om, det er her vi vil finne forskjellen mellom versjon 2.x og 3.x, siden kommaene før og etter num i versjon 2 deler den i en liste og i 3 viser den deg normal (uten liste).
 print ("Arbeidet utført, endret", tall, "filer")
Dette kan endres for å tolkes det samme ved hjelp av + og konvertere variabelen num til en streng med funksjonen str, eller gjennom %, nedenfor er de 2 kodene:
 print ("Arbeid utført, endret" + str (num) + "filer") print ("Utført arbeid, endret% d filer"% num)
Det ble igjen på den første måten for å vise at mellom versjoner av Python er det endringer (de kan være små som i dette tilfellet, men noe som fungerer i versjon 3 fungerer kanskje ikke i versjon 2, og omvendt).

Nå og nesten for å fullføre opplæringen, skal vi utføre koden og se hvordan den fungerer, nedenfor legger jeg igjen 2 bilder av utførelsen, ved hjelp av Python 3.x i den første og i den andre Python 2.x:

Her setter vi pris på de små forskjellene. Nå skal vi se hvordan testmappen som vi så før ser ut:

De 4 filene som hadde .txt er endret og har nå .sh, det ser ut til at bare test1.sh -filen er kjørbar, dette er fordi resten ikke inneholder data. Vi skal kjøre filen test1.sh, som bare starter ls -l at vi sa at den inneholdt, og så hjelper det oss å se tillatelsene.

Opplæringen slutter her, i tilfelle det er av interesse, en lenke til en annen opplæring om Python: søk etter filnavn.

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave