Python для иммигрантов

Когда я иммигрировал с Виндовса на Линукс, одной из первых моих проблем была проблема перекодировки моих исходников программ.

Это были не только какие-то программные наработки комповых программ на С/С++, которые не хотелось бы терять. По большей части это были исходники программ для микроконтроллеров, с комментариями и пояснениями.

Конечно, можно при открытии текстовых файлов в редакторе принудительно указывать их кодировку. Но делать это так каждый раз при их открытии было не особенно удобно. Как вариант, можно было их перекодировать с помощью утилиты iconv. Что я и делал по мере погружения в Линукс.

Претензий к названной утилите у меня нет. Использование её не сложное, работает она быстро, и проблем мне ни разу не доставила.

Я привожу ниже шаблон для её использования чисто для справки:

$ iconv -f cp1251 -t utf-8 -o

Если не указывать опцию -o , то утилита осуществит вывод на терминал.

У меня практически не осталось текстовых файлов в кодировке Виндовса. Да, я уже практически и не помню, что такое Виндовс. Я давно уже не обращался к этой утилите, и даже успел подзабыть как она точно называется.

Вчера я разбирался с Питоном. И в какой-то момент я вспомнил о своих давних проблемах с перекодировками. Да, на тот момент я не знал Питона и не мог даже предположить, что проблема перекодировки средствами Питона решается всего несколькими строчками:

  fin = open(infile, "r", encoding="cp1251")
  fout = open(outfile, "w", encoding="utf-8")

  for line in fin:
    fout.write(line)

Здесь infile и outfile — это имена входного и выходного файлов. Третий параметр в вызовах функции open задает кодировку файлов. Цикл for построчно переписывает содержимое одного файла в другой.

Всё! Ничего заумного в этом коде нет!

Питон не требует обязательной компиляции программ перед их запуском. Питоновские программы — текстовые. Вы можете на ходу подправить программу и сразу же её запустить на исполнение.

Применительно к приведённому выше фрагменту — подставьте нужные имена файлов и нужную кодировку и вы получите другое поведение. Легко и непринуждённо!

Для пущей важности я приведу полный текст программы перекодировщика текстовых файлов:

#!/usr/bin/env python3
# coding:utf-8

''' encoder.py '''

import sys

if __name__ == "__main__":
    if len(sys.argv) < 3:
        print("Используйте: {0} <infile> <outfile>".format(sys.argv[0]))
        sys.exit()

    try:
        fin = open(sys.argv[1], "r", encoding="cp866")
        fout = open(sys.argv[2], "w", encoding="utf-8")

        for line in fin:
            fout.write(line)

        fin.close()
        fout.close()

    except:
        print("Ошибка")

Текст программы не является идеальным шедевром для подражания. Это обычный код. Не самый «чистый», его можно доводить и доводить до блеска. Но он рабочий. И как основа для других программ или как средство для быстрого достижения цели (для перекодировки) он годится вполне.

Реклама

2 responses to “Python для иммигрантов

  1. Представляете какую мощь вы получите, когда руки дойдут до Emacs 🙂

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s