Мне нравится разделять проблемы в подобных ситуациях - я думаю, что это действительно делает код чище, проще в обслуживании и может быть более эффективным.
Здесь у вас есть 3 проблемы: чтение файла UTF-8, обработка строк и запись файла UTF-8. Предполагая, что ваша обработка основана на строках, это прекрасно работает в Python, так как открытие и перебор строк файла встроен в язык. Помимо ясности, это также более эффективно, поскольку позволяет обрабатывать огромные файлы, которые не помещаются в память. Наконец, он дает вам отличный способ протестировать ваш код - поскольку обработка отделена от файла io, он позволяет вам писать модульные тесты или даже просто запускать код обработки на примере текста и вручную просматривать выходные данные, не возясь с файлами. *
Я преобразую строки в верхний регистр для целей примера - возможно, ваша обработка будет более интересной. Мне нравится использовать yield здесь - это облегчает обработку для удаления или вставки дополнительных строк, хотя это не используется в моем тривиальном примере.
def process(lines):
for line in lines:
yield line.upper()
with codecs.open(file1, 'r', 'utf-8') as infile:
with codecs.open(file2, 'w', 'utf-8') as outfile:
for line in process(infile):
outfile.write(line)