Hvordan lage endringer i flere filer ved hjelp av Python

Si at noen er kjent med britisk stavemåte og har bestemt seg for å fullføre sin grad i USA. Han blir bedt om å skrive et papir om Python for klassen. Han er velbevandret i Python og har ikke noe problem å skrive i papiret. Han snakket om bilder i en del av papiret og skrev mer enn en gang ordet grå (Britisk stavemåte) i stedet for grå (USA stavemåte), i tillegg til nabolag (Britisk stavemåte) i stedet for nabolag (Amerikansk stavemåte). Men han er nå i USA og må gå gjennom alle ordene stavet den britiske måten og erstatte dem med de amerikanske stavemåten.

Dette er en av mange scenarier der vi må endre staving eller feil i flere steder. 

I dette raske tipset vil jeg vise deg et eksempel der vi har fem tekstfiler som har feilstavet navnet mitt. Det er, i stedet for å skrive Abder, Adber er skrevet. Eksemplet vil vise deg hvordan vi kan bruke Python til å rette stavemåten til navnet mitt i alle tekstfiler som er inkludert i en katalog.

La oss komme i gang!

Data forberedelse

Før vi går videre med eksemplet, la oss forberede dataene (tekstfiler) vi vil jobbe med. Gå videre og last ned katalogen med sine filer. Unzip katalogen, og du er nå satt.

Som du kan se, har vi en katalog som heter Abder som inneholder fem forskjellige filer som heter 1,2,3,4 og 5.

Gjennomføring

La oss komme til den morsomme delen. Det første vi må gjøre er å lese innholdet i katalogen Abder. For dette kan vi bruke listdir () metode, som følger:

importer oss katalogen = os.listdir ('/ Users / DrAbder / Desktop / Abder')

Hvis vi prøver å se hva som finnes i katalogen, kan vi gjøre følgende:

skrive ut katalog

I så fall vil vi få:

['.DS_Store', '1.rtf', '2.rtf', '3.rtf', '4.rtf', '5.rtf']

Dette viser at vi har fem RFT filer i katalogen.

For å sikre at vi jobber med gjeldende katalog (katalog av interesse), kan vi bruke chdir som følger:

os.chdir ( '/ Users / DrAbder / Desktop / Abder')

Det neste vi må gjøre er å løpe gjennom alle filene i katalogen Abder. Vi kan bruke en for-løkke som følger:

for fil i katalogen:

Siden vi vil se i hver av de fem filene i katalogen og se etter Adber, Den vanlige tingen å gjøre på dette stadiet er å åpne og lese innholdet i hver fil:

open_file = open (fil, 'r') read_file = open_file.read ()

Nå kommer et viktig skritt, spesielt når man snakker om mønstermatching, i vårt tilfelle, søker etter Adber. Dette trinnet er bruken av regulære uttrykk. I Python, for å kunne bruke vanlige uttrykk, bruker vi re-modulen. 

Vi bruker to hovedfunksjoner fra denne modulen. Den første er kompilere ():

Samle et vanlig uttrykksmønster i et vanlig uttrykksobjekt, som kan brukes til samsvarende bruk av det kamp()og Søke() fremgangsmåter.

Og den andre er sub (), for å erstatte feil stavemåte med riktig. Vi vil således gjøre følgende:

regex = re.compile ('Adber') read_file = regex.sub ('Abder', read_file)

Til slutt vil vi skrive den nye teksten etter at den er erstattet til våre filer, som følger:

write_file = open (fil, 'w') write_file.write (read_file)

Sette alt sammen

I denne delen, la oss se hvordan hele Python-skriptet, som vil se etter Adber i hver fil og erstatt den med Abder, vil se:

importere os, re directory = os.listdir ('/ Brukere / DrAbder / Desktop / Abder') os.chdir ('/ Users / DrAbder / Desktop / Abder') for fil i katalogen: open_file = open (fil, 'r' ) read_file = open_file.read () regex = re.compile ('Adber') read_file = regex.sub ('Abder', read_file) write_file = open (fil, 'w') write_file.write (read_file)

Som vi kan se, gjør Python det veldig enkelt å utføre endringer på tvers av flere filer ved hjelp av for-løkke. En annen viktig del å huske her er bruken av regulære uttrykk for mønstermatching. 

Hvis du vil vite mer om Pythons løkker, sjekk en glatt forfriskning på pythons løkker. Og, for mer informasjon om vanlige uttrykk, sjekk regelmessige uttrykk i Python.