Hoe u wijzigingen aanbrengt in meerdere bestanden met behulp van Python

Stel dat iemand bekend is met de Britse spelling en heeft besloten zijn studie in de VS af te ronden. Hij wordt gevraagd om een ​​artikel over Python voor de klas te schrijven. Hij is goed thuis in Python en heeft geen probleem met het schrijven van de krant. Hij had het over beelden in een deel van zijn artikel en schreef meer dan eens het woord grijs (Britse spelling) in plaats van grijs (Amerikaanse spelling), naast buurt (Britse spelling) in plaats van buurt (Amerikaanse spelling). Maar hij is nu in de VS en moet alle woorden doornemen die op de Britse manier gespeld zijn en ze vervangen door de spelling van de VS..

Dit is een van de vele scenario's waarin we een aantal spelling of fouten moeten wijzigen meerdere locaties. 

In deze snelle tip laat ik u een voorbeeld zien van vijf tekstbestanden die mijn naam verkeerd gespeld hebben. Dat wil zeggen, in plaats van schrijven abder, Adber is geschreven. In het voorbeeld ziet u hoe we Python kunnen gebruiken om de spelling van mijn naam in alle tekstbestanden in een map te corrigeren.

Laten we beginnen!

Data voorbereiding

Laten we, voordat we verder gaan met het voorbeeld, de gegevens voorbereiden (tekstbestanden) waarmee we willen werken. Ga je gang en download de map met zijn bestanden. Pak de map uit en je bent nu helemaal klaar.

Zoals je kunt zien, hebben we een map met de naam abder die vijf verschillende bestanden met de naam bevat 1,2,3,4 en 5.

Implementatie

Laten we naar het leuke gedeelte gaan. Het eerste wat we moeten doen, is de inhoud van de map lezen abder. Hiervoor kunnen we de listdir () methode, als volgt:

import os directory = os.listdir ('/ Users / DrAbder / Desktop / Abder')

Als we proberen te zien wat er in de directory staat, kunnen we het volgende doen:

print directory

In welk geval we zullen krijgen:

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

Dit laat zien dat we er vijf hebben RFT bestanden in de map.

Om er zeker van te zijn dat we met de huidige directory (directory of interest) werken, kunnen we gebruiken chdir als volgt:

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

Het volgende wat we moeten doen, is door alle bestanden in de map bladeren abder. We kunnen een gebruiken for loop als volgt:

voor bestand in map:

Omdat we in elk van de vijf bestanden in de map willen zoeken en zoeken Adber, normaal is het om in dit stadium de inhoud van elk bestand te openen en te lezen:

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

Nu komt een essentiële stap, vooral wanneer we het hebben over patroonvergelijking, in ons geval, op zoek naar Adber. Deze stap is het gebruik van reguliere expressies. In Python gebruiken we de re-module om reguliere expressies te gebruiken. 

We zullen twee hoofdfuncties van deze module gebruiken. De eerste is compile ():

Compileer een regulier expressiepatroon in een regulier expressieobject, dat kan worden gebruikt voor het matchen met behulp van de wedstrijd()en zoeken() methoden.

En de tweede is sub (), voor het vervangen van de verkeerde spelling door de juiste. We zullen dus het volgende doen:

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

Ten slotte willen we de nieuwe tekst na vervanging van onze bestanden als volgt schrijven:

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

Alles samenvoegen

Laten we in dit gedeelte eens kijken hoe het hele Python-script eruitziet Adber in elk bestand en vervang dat door abder, zal kijken:

import os, re directory = os.listdir ('/ Users / DrAbder / Desktop / Abder') os.chdir ('/ Users / DrAbder / Desktop / Abder') voor bestand in map: open_file = open (bestand, 'r' ) read_file = open_file.read () regex = re.compile ('Adber') read_file = regex.sub ('Abder', read_file) write_file = open (bestand, 'w') write_file.write (read_file)

Zoals we kunnen zien, maakt Python het zeer eenvoudig om modificaties uit te voeren over meerdere bestanden met behulp van de for loop. Een ander belangrijk onderdeel om te onthouden is het gebruik van reguliere expressies voor patroonafstemming. 

Als je meer wilt weten over de loops van Python, vink dan A Smooth Refresher op Python's Loops aan. En voor meer informatie over reguliere expressies, vink Reguliere expressies in Python aan.