() translation by (you can also view the original English article)
Digamos que alguém familiarizado à ortografia britânica decidiu completar sua graduação nos EUA. Foi pedido que escrevesse um artigo sobre Python na aula. Ele é conhece bem Python e escreve o artigo sem problema. Ele falou sobre imagens em uma parte do artigo e escreveu mais de uma vez a palavra grey
(britânica) ao invés de gray
(americana), além de neighbourhood
(britânica) ao invés de neighborhood
(americana). Mas agora ele está nos EUA e precisa ver todas as versões britânicas das palavras e substituí-las pelas versões americanas.
Esse é um dos vários cenários onde precisamos alterar ortografias ou erros em vários lugares.
Nessa dica rápida, mostraremos um exemplo em que temos cinco arquivos de texto onde um nome foi escrito errado. Isso é, ao invés de Abder
, Adber
foi escrito. O exemplo mostrará como usar Python para corrigir a escrita do nome em todos os arquivos em um diretório.
Comecemos!
Preparação dos Dados
Antes de continuarmos, preparemos os dados (arquivos de texto) que trabalharemos. Continuemos e baixemos os arquivos. Extraiamos os arquivos e tudo estará pronto.
Como vemos, temos uma pasta chamada Abder
com cinco arquivos diferentes chamados 1,2,3,4 e 5
.
Implementação
Cheguemos à parte legal. A primeira coisa a fazer é ler o conteúdo do diretório Abder
. Para isso, usamos o método listdir()
, assim:
1 |
import os |
2 |
directory = os.listdir('/Users/DrAbder/Desktop/Abder') |
Se tentarmos ver o conteúdo do diretório, podemos fazer o seguinte:
1 |
print directory |
E nesse caso, teremos:
1 |
['.DS_Store', '1.rtf', '2.rtf', '3.rtf', '4.rtf', '5.rtf'] |
Isso mostra que temos cinco arquivos rtf
na pasta.
Para garantir que estamos na pasta atual (a que queremos), podemo usar chdir
, assim:
1 |
os.chdir('/Users/DrAbder/Desktop/Abder') |
A próxima coisa que precisamos fazer é iterar por todos os arquivos no diretório. Podemos usar um for-loop
, assim:
1 |
for file in directory: |
Como queremos ver os cinco arquivos e procurar por Adber
, o que devemos fazer agora é abrí-los e ler seus conteúdos:
1 |
open_file = open(file,'r') |
2 |
read_file = open_file.read() |
Agora vem um passo vital, especialmente ao falar sobre combinação de padrões, aqui, a busca por Adber
: Esse passo é o uso das expressões regulares. Em Python, para usá-las, precisamos do módulo re.
Usaremos duas funções desse módulo. A primeira é compile():
Compila padrão de expressão regular em objeto de expressão regular, para ser usado numa pesquisa usando os métodosmatch()
esearch()
.
E o segundo é sub(), para substituir a forma errada pela correta. E faremos assim:
1 |
regex = re.compile('Adber') |
2 |
read_file = regex.sub('Abder', read_file) |
Por fim, queremos escrever o novo texto após a substituição de volta em nossos arquivos:
1 |
write_file = open(file,'w') |
2 |
write_file.write(read_file) |
Juntando Tudo
Nessa seção, veremos como um script Python, onde procuramos por Adber
em cada arquivo e substituímos por Abder
, ficará:
1 |
import os, re |
2 |
|
3 |
directory = os.listdir('/Users/DrAbder/Desktop/Abder') |
4 |
os.chdir('/Users/DrAbder/Desktop/Abder') |
5 |
|
6 |
for file in directory: |
7 |
open_file = open(file,'r') |
8 |
read_file = open_file.read() |
9 |
regex = re.compile('Adber') |
10 |
read_file = regex.sub('Abder', read_file) |
11 |
write_file = open(file,'w') |
12 |
write_file.write(read_file) |
Como vemos, Python facilita muito essas modificações em vários arquivos usando for-loop
. Outra parte importante a lembrar aqui é o uso das expressões regulares para combinação de padrões.
Para saber mais sobre os laços Python, vejamos Um Lembre Suave sobre Laços em Python. E para mais informações sobre expressões regulares, vejamos Expressões Regulares em Python.