Доброго времени суток, читатели, зрители моего канала programmer's notes.
Приложение к видео
Перекодировка и копирование файлов
Перекодировка файлов
Перекодировка файлов стандартными средствами Python просто элементарна.
1-й способ. При открытии текстового файла для указываем его кодировку. При открытии файла для записи также указываем кодировку, под которой мы должны его записать. Если не указывать кодировку, то берётся кодировка по умолчанию. См. программу ниже.
#!/usr/bin/python3
f1 = open('1.txt', 'r', encoding='866')
s = f1.read()
f1.close()
f2 = open('2.txt', 'w')
f2.write(s)
f2.close()
При открытии на запись можно было бы записать f2 = open('2.txt', 'w', encoding='utf-8'), но по-умолчанию кодировка и так utf-8. В результате получаем перекодированный файл.
2-й способ. Перекодировку можно сделать, когда строка уже считана, используется метод decode(). Но открывать файл для чтения следует уже как бинарный. Именно тогда decode() преобразует строку байтов в последовательность символов.
#!/usr/bin/python3
f1 = open('1.txt', 'rb')
s = f1.read()
s = s.decode('866')
f1.close()
f2 = open('2.txt', 'w')
f2.write(s)
f2.close()
Обращаю внимание, что в обоих случаях мы фактически копировали файл в другой.
Копирование файлов
Как было написано выше, копирование файла можно осуществить простыми действиями: считываем и записываем бинарную строку.
#!/usr/bin/python3
f1 = open('1.txt', 'rb')
s = f1.read()
f2 = open('3.txt', 'wb')
f2 = f2.write(s)
f2.close()
f1.close()
Но есть одно беспокойство. Файл, который вы собираетесь копировать, может быть очень большим. Вот тогда можно несколько изменить решение и копировать порциями.
Текст программы: см. здесь.
Алгоритм основан на том факте, что метод write() возвращает количество записанных байтов. Если это количество меньше длины буфера, значит копирование завершено. В качестве критерия можно брать и длину s, сравнивая её с n.
Замечание 1.
Мне могут возразить, что количество считанных байтов и количество записанных байтов может не совпадать. Но это скорее исключение, чем правило. Этот вариант всегда можно купировать дополнительной проверкой или перехватом исключения.
Замечание 2.
Имена открываемых файлов могут содержать и путь к ним. Я говорил об этом в видеоуроке. Не вижу здесь никаких сложностей. Впрочем, мы вернёмся к вопросам, связанным с путями в файловой системе, когда в ближайшее время возьмёмся за стандартную библиотеку os.
Всего наилучшего. Оставляйте свои комментарии, не забывайте про лайки и подписывайтесь на мой канал programmer's notes.