Pull to refresh

Поиск символа по части названия

Reading time2 min
Views804
У вас никогда не возникало необходимости найти символ по его частичному названию? У меня такое порой бывает, например найти никогда не используемую мной букву «ѣ», найти символы греческого алфавита (σ, ε, μ) и т.п. Достаточно удобное средство для этого — kcharselect из KDE4, но ради единственной утилиты ставить здоровый кусок KDE неохота. Поэтому появилась мысль написать скрипт, который бы искал символ по описанию.

Решение относительно простое. Есть файл с описанием символов и их кодами, находим нужное описание, и выводим на экран вместе с символом. В Gentoo Linux такой файл можно найти вот тут: /usr/share/misc/unicode (является частью sys-apps/miscfiles). Универсальный вариант — это взять данные с ftp.unicode.org

Сам код выглядит так:
#!/usr/bin/env python
from __future__ import print_function
from sys import argv, version_info
import csv
import re
if version_info[0== 3:
    unichr = chr

data = '/usr/share/misc/unicode'
descriptions = csv.reader(open(data), delimiter=';')
request = re.compile(" ".join(argv[1:]), flags=re.I)
for record in descriptions:
    if request.findall(record[1]):
        (code, descr) = record[:2]
        print(code, unichr(int(code,16)), descr)

Немного о коде и работе. Вообще, есть модуль unicodedata, но он позволяет искать лишь по полному названию. Без CSV тоже можно было обойтись (например просто использовать split(';')). Скрипт, как видно вполне понимает regular expressions. И да, можно было бы использовать grep, awk/sed, и потом как-то извратится с номером (кстати в последнем не уверен), зато заставить работать python под Windows проще чем все эти утилиты. Так как приложение работает из консоли, то в зависимости от шрифта некоторые символы могут не отображаться.

Примеры использования.
$ python ./unicodesearch.py yat<br/>0462 Ѣ CYRILLIC CAPITAL LETTER YAT<br/>0463 ѣ CYRILLIC SMALL LETTER YAT<br/>...<br/>$ python ./unicodesearch.py "greek.*epsilon$"<br/>0395 Ε GREEK CAPITAL LETTER EPSILON<br/>03B5 ε GREEK SMALL LETTER EPSILON<br/><br/>$ python ./unicodesearch.py heavy check mark<br/>2714 ✔ HEAVY CHECK MARK<br/>
Tags:
Hubs:
+8
Comments12

Articles