Digamos que alguém esteja familiarizado com a ortografia britânica e decidiu concluir sua graduação nos EUA. Ele é convidado a escrever um artigo sobre Python para a classe. Ele é bem versado em Python e não tem problemas em escrever o artigo. Ele estava falando sobre imagens em uma parte de seu artigo e escreveu mais de uma vez a palavra grey
(ortografia britânica) em vez de gray
(ortografia dos EUA), além de neighbourhood
(ortografia britânica) em vez de neighborhood
(ortografia dos EUA). Mas ele está agora nos EUA e tem que passar por todas as palavras escritas da maneira britânica e substituí-las pelas grafias americanas.
Este é um dos muitos cenários em que precisamos alterar alguma ortografia ou erro na múltiplo Localizações.
Nesta dica rápida, mostrarei um exemplo em que temos cinco arquivos de texto que escreveram incorretamente meu nome. Ou seja, em vez de escrever Abder
, Adber
está escrito. O exemplo mostrará como podemos usar o Python para corrigir a ortografia do meu nome em todos os arquivos de texto incluídos em um diretório.
Vamos começar!
Preparação de dados
Antes de prosseguirmos com o exemplo, vamos preparar os dados (arquivos de texto) com os quais queremos trabalhar. Vá em frente e baixe o diretório com seus arquivos. Descompacte o diretório e agora está tudo pronto.
Como você pode ver, temos um diretório chamado Abder
que contém cinco arquivos diferentes chamados 1,2,3,4, and 5
.
Implementação
Vamos para a parte divertida. A primeira coisa que precisamos fazer é ler o conteúdo do diretório Abder
. Para isso, podemos utilizar o listdir()
método, como segue:
import os directory = os.listdir('/Users/DrAbder/Desktop/Abder')
Se tentarmos ver o que está dentro do diretório, podemos fazer o seguinte:
print directory
Nesse caso, obteremos:
['.DS_Store', '1.rtf', '2.rtf', '3.rtf', '4.rtf', '5.rtf']
Isso mostra que temos cinco rft
arquivos dentro do diretório.
Para ter certeza de que estamos trabalhando com o diretório atual (diretório de interesse), podemos usar chdir
do seguinte modo:
os.chdir('/Users/DrAbder/Desktop/Abder')
A próxima coisa que precisamos fazer é percorrer todos os arquivos no diretório Abder
. Podemos usar um for-loop
do seguinte modo:
for file in directory:
Como queremos procurar em cada um dos cinco arquivos do diretório e procurar Adber
o normal nesta fase é abrir e ler o conteúdo de cada arquivo:
open_file = open(file,'r') read_file = open_file.read()
Agora vem um passo vital, especialmente quando se fala em correspondência de padrões, no nosso caso, procurando por Adber
. Esta etapa é o uso de expressões regulares. Em Python, para usar expressões regulares, usaremos o módulo re.
Nós estaremos usando duas funções principais deste módulo. O primeiro é compilar():
Compile um padrão de expressão regular em um objeto de expressão regular, que pode ser usado para correspondência usando seu
match()
esearch()
métodos.
E o segundo é sub(), para substituir a ortografia errada pela correta. Faremos assim o seguinte:
regex = re.compile('Adber') read_file = regex.sub('Abder', read_file)
Finalmente, queremos escrever o novo texto após a substituição em nossos arquivos, como segue:
write_file = open(file,'w') write_file.write(read_file)
Juntando tudo
Nesta seção, vamos ver como todo o script Python, que procurará Adber
em cada arquivo e substitua isso por Abder
vai olhar:
import os, re directory = os.listdir('/Users/DrAbder/Desktop/Abder') os.chdir('/Users/DrAbder/Desktop/Abder') for file in directory: open_file = open(file,'r') read_file = open_file.read() regex = re.compile('Adber') read_file = regex.sub('Abder', read_file) write_file = open(file,'w') write_file.write(read_file)
Como podemos ver, o Python facilita muito a realização de modificações em vários arquivos usando o for-loop
. Outra parte importante a ser lembrada aqui é o uso de expressões regulares para correspondência de padrões.
Se você quiser saber mais sobre os loops do Python, consulte A Smooth Refresher on Python’s Loops. E, para obter mais informações sobre expressões regulares, consulte Expressões regulares em Python.
Originally posted 2022-06-27 22:23:01.