Säg att någon är bekant med brittisk stavning och har bestämt sig för att slutföra sin examen i USA. Han ombeds skriva ett papper om Python för klassen. Han är väl känd i Python och har ingen fråga att skriva i papperet. Han pratade om bilder i en del av sitt papper och skrev mer än en gång ordet grå
(Brittisk stavning) istället för grå
(USA stavning), förutom grannskap
(Brittisk stavning) istället för grannskap
(Amerikansk stavning). Men han är nu i USA och måste gå igenom alla orden stavade den brittiska vägen och ersätta dem med de amerikanska stavningarna.
Detta är ett av många scenarier där vi behöver ändra stavning eller misstag i flera olika platser.
I detta snabba tips visar jag dig ett exempel där vi har fem textfiler som har felstavat mitt namn. Det är istället för att skriva Abder
, Adber
är skrivet. I exemplet visas hur vi kan använda Python för att korrigera stavningen av mitt namn i alla textfiler som ingår i en katalog.
Låt oss börja!
Innan vi går framåt med exemplet, låt oss förbereda de data (textfiler) vi vill arbeta med. Gå vidare och ladda ner katalogen med dess filer. Unzip katalogen och du är nu klar.
Som du kan se har vi en katalog som heter Abder
som innehåller fem olika filer som heter 1,2,3,4 och 5
.
Låt oss komma till den roliga delen. Det första vi behöver göra är att läsa innehållet i katalogen Abder
. För detta kan vi använda listdir ()
metod, enligt följande:
importera os katalog = os.listdir ('/ Users / DrAbder / Desktop / Abder')
Om vi försöker se vad som finns i katalogen kan vi göra följande:
skriva ut katalog
I så fall får vi:
['.DS_Store', '1.rtf', '2.rtf', '3.rtf', '4.rtf', '5.rtf']
Detta visar att vi har fem rft
filer i katalogen.
För att se till att vi arbetar med den aktuella katalogen (katalog av intresse) kan vi använda chdir
som följer:
os.chdir ( '/ Användare / DrAbder / Desktop / Abder')
Nästa sak vi behöver göra är att gå igenom alla filerna i katalogen Abder
. Vi kan använda en for-slinga
som följer:
för fil i katalogen:
Eftersom vi vill titta i var och en av de fem filerna i katalogen och leta efter Adber
, Det normala att göra på detta stadium är att öppna och läsa innehållet i varje fil:
open_file = open (fil, 'r') read_file = open_file.read ()
Nu kommer ett viktigt steg, speciellt när man pratar om mönstermatchning, i vårt fall, letar efter Adber
. Detta steg är användningen av reguljära uttryck. I Python, för att kunna använda reguljära uttryck, använder vi remodulen.
Vi kommer att använda två huvudfunktioner från denna modul. Den första är kompilera ():
Kompilera ett vanligt uttrycksmönster i ett vanligt uttrycksobjekt, som kan användas för matchning med dessmatch()
ochSök()
metoder.
Och den andra är sub (), för att ersätta fel stavning med den rätta. Vi gör således följande:
regex = re.compile ('Adber') read_file = regex.sub ('Abder', read_file)
Slutligen vill vi skriva den nya texten efter ersättning till våra filer, enligt följande:
write_file = open (file, 'w') write_file.write (read_file)
I det här avsnittet får vi se hur hela Python-skriptet, som ska leta efter Adber
i varje fil och ersätt det med Abder
, ska titta:
importera os, re directory = os.listdir ('/ Användare / DrAbder / Desktop / Abder') os.chdir ('/ Users / DrAbder / Desktop / Abder') för filen i katalogen: open_file = open (file, '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, gör Python det väldigt enkelt att genomföra ändringar över flera filer med hjälp av for-slinga
. En annan viktig del att komma ihåg här är användningen av reguljära uttryck för mönster matchning.
Om du vill veta mer om Pythons loopar, kolla A Smooth Refresher på Pythons Loops. Och, för mer information om reguljära uttryck, kolla regelbundna uttryck i Python.