Статьи

Как внести изменения в несколько файлов с помощью Python

Скажите, что кто-то знаком с британской орфографией и решил получить степень в США. Его просят написать статью о 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 .