Скажите, что кто-то знаком с британской орфографией и решил получить степень в США. Его просят написать статью о Python для класса. Он хорошо разбирается в Python и не имеет проблем при написании статьи. Он говорил об изображениях в какой-то части своей статьи и не раз писал слово grey
(британское правописание) вместо gray
(американское правописание), в дополнение к neighbourhood
(британское правописание) вместо neighborhood
(американское правописание). Но он сейчас в США и должен пройти через все слова, записанные по-английски, и заменить их на американское.
Это один из многих сценариев, в которых нам нужно изменить орфографию или ошибку в нескольких местах.
В этом кратком совете я покажу вам пример, где у нас есть пять текстовых файлов с ошибками в моем имени. То есть вместо того, чтобы писать Abder
, Adber
. Пример покажет вам, как мы можем использовать Python для исправления написания моего имени во всех текстовых файлах, включенных в каталог.
Давайте начнем!
Подготовка данных
Прежде чем мы продолжим работу с примером, давайте подготовим данные (текстовые файлы), с которыми мы хотим работать. Идите и скачайте каталог с его файлами . Разархивируйте каталог, и все готово.
Как видите, у нас есть каталог с именем Abder
который содержит пять разных файлов с именами 1,2,3,4, and 5
.
Реализация
Давайте перейдем к забавной части. Первое, что нам нужно сделать, это прочитать содержимое каталога Abder
. Для этого мы можем использовать метод listdir()
следующим образом:
1
2
|
import os
directory = os.listdir(‘/Users/DrAbder/Desktop/Abder’)
|
Если мы попытаемся увидеть, что находится внутри каталога, мы можем сделать следующее:
1
|
print directory
|
В этом случае мы получим:
1
|
[‘.DS_Store’, ‘1.rtf’, ‘2.rtf’, ‘3.rtf’, ‘4.rtf’, ‘5.rtf’]
|
Это показывает, что у нас есть пять файлов rft
внутри каталога.
Чтобы убедиться, что мы работаем с текущим каталогом (интересующим каталогом), мы можем использовать chdir
следующим образом:
1
|
os.chdir(‘/Users/DrAbder/Desktop/Abder’)
|
Следующее, что нам нужно сделать, это перебрать все файлы в каталоге Abder
. Мы можем использовать for-loop
следующим образом:
1
|
for file in directory:
|
Так как мы хотим посмотреть в каждом из пяти файлов в каталоге и найти Adber
, на этом этапе обычно нужно открыть и прочитать содержимое каждого файла:
1
2
|
open_file = open(file,’r’)
read_file = open_file.read()
|
Теперь наступает жизненно важный шаг, особенно когда речь идет о сопоставлении с образцом, в нашем случае, поиске Adber
. Этот шаг — использование регулярных выражений. В Python для использования регулярных выражений мы будем использовать модуль re .
Мы будем использовать две основные функции из этого модуля. Первый — это compile () :
Скомпилируйте шаблон регулярного выражения в объект регулярного выражения, который можно использовать для сопоставления, используя методы
match()
иsearch()
.
И второе — sub () , для замены неправильного написания на правильное. Таким образом, мы будем делать следующее:
1
2
|
regex = re.compile(‘Adber’)
read_file = regex.sub(‘Abder’, read_file)
|
Наконец, мы хотим записать новый текст после замены в наши файлы следующим образом:
1
2
|
write_file = open(file,’w’)
write_file.write(read_file)
|
Собираем все вместе
В этом разделе давайте посмотрим, как будет выглядеть весь скрипт Python, который будет искать Adber
в каждом файле и заменять его на Adber
:
01
02
03
04
05
06
07
08
09
10
11
12
|
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)
|
Как мы видим, Python позволяет легко вносить изменения в несколько файлов, используя for-loop
. Еще одна важная часть, которую следует помнить, это использование регулярных выражений для сопоставления с образцом.
Если вы хотите узнать больше о циклах Python, установите флажок «Плавное обновление» в циклах Python . И, для получения дополнительной информации о регулярных выражениях, проверьте Регулярные выражения в Python .