P.S. Кодировка в исходном коде Python
Python 3 предполагает, что ваш исходный код — т.е. каждый файл .py — записан в кодировке UTF-8.
☞ В Python 2, кодировкой по умолчанию для файлов .py была кодировка ASCII. В Python 3 кодировка по умолчанию — UTF-8.
Если вы желаете использовать другую кодировку в вашем коде, вы можете разместить объявление кодировки на первой строке каждого файла. Например, для кодировки windows-1252 объявление выглядит следующим образом:
# -*- coding: windows-1252 -*-
Объявление кодировки также может располагаться на второй строке файла, если первой строкой является путь к интерпретатору Python.
#!/usr/bin/python3
# -*- coding: windows-1252 -*-
За дополнительной информацией обращайтесь к PEP 263: Defining Python Source Code Encodings.
Материалы для дальнейшего чтения
- On Unicode in Python:
- Python Unicode HOWTO
- What’s New In Python 3: Text vs. Data Instead Of Unicode vs. 8-bit
- PEP 261 explains how Python handles astral characters outside of the Basic Multilingual Plane (i.e. characters whose ordinal value is greater than 65535)
- On Unicode in general:
- The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and * Character Sets (No Excuses!)
- On the Goodness of Unicode
- On Character Strings
- Characters vs. Bytes
- On character encoding in other formats:
- Character encoding in XML
- Character encoding in HTML
- On strings and string formatting:
- string — Common string operations
- Format String Syntax
- Format Specification Mini-Language
- PEP 3101: Advanced String Formatting
Регулярные выражения
❝ Некоторые люди, во время решения одной проблемы думают: «Я знаю, я буду использовать регулярные выражения». Теперь у них две проблемы… ❞— Jamie Zawinski
Погружение
Каждый новый язык программирования имеет встроенные функции для работы со строками. В Python, строки имеют методы для поиска и замены: index(), find(), split(), count(), replace() и т.д. Но эти методы ограничены для простейших случаев. Например метод index() ищет простую жёстко заданную часть строки и поиск всегда регистрозависимый. Чтобы выполнить регистронезависимый поиск по строке s, вы должны вызвать s.lower() или s.upper() для того чтобы быть уверенным что строка имеет соответствующий регистр для поиска. Методы replace() и split() имеют те же ограничения.
Если ваша задача может быть решена при помощи этих методов, лучше использовать их. Они простые и быстрые, легко читаемые, много может быть сказано о быстром, простом и удобочитаемом коде. Но если вы обнаружите что вы используете большое количество строковых функций с условиями if для обработки специальных случаев, или используете множество последовательных вызовов split() и join() чтобы нарезать на кусочки ваши строки, значит вы нуждаетесь в регулярных выражениях.
Регулярные выражения это мощный и (по большей части) стандартизированный способ для поиска, замены и парсинга текста при помощи комплексных шаблонов. Хотя синтаксис регулярных выражений довольно сложный и выглядит непохожим на нормальный код (прим. пер. «смахивает на perl»), конечный результат часто более удобочитаемый чем набор из последовательных функций для строк. Существует даже способ поместить комментарии внутрь регулярных выражений, таким образом вы можете включить небольшую документацию в регулярное выражение.
Если вы пользовались регулярными выражениями в других языках (таких как Perl, JavaScript, или PHP), синтаксис Python-а будет для вас достаточно привычным. Прочитайте обзор модуля re для того чтобы узнать о доступных функциях и их аргументах. |
⁂