Коды символов в Python: от символа к числу и обратно
Основные способы работы с кодами символов
Базовое решение: получение кода символа и обратное преобразование
В Python для получения числового кода символа используется встроенная функция ord(), а для преобразования числа обратно в символ - chr(). Эти функции работают с кодировкой Unicode (включая ASCII).
print(ord('A')) # 65
print(chr(65)) # 'A'обработка больших данных python (обработка больших данных в python)
65 A
очистка данных python (очистка данных в python)
Типичная ошибка: передача строки длиннее одного символа в ord(). Функция ожидает ровно один символ. Решение - взять первый символ: ord('Hello'[0]) или обрабатывать строку посимвольно.
Как получить код первого символа строки?
Используется обращение по индексу и ord():
text = "Python"
code = ord(text[0]) # 80 (код 'P')Python подготовка данных (подготовка данных в python)
80
Python работа с большими данными (работа с большими данными в python)
Если строка пустая, возникает IndexError. Перед обращением следует проверить длину строки: if text: code = ord(text[0]).
Как применить ord() ко всем символам строки и получить список кодов?
Использование генератора списка или map():
s = "Привет"
codes = [ord(c) for c in s] # [1055, 1088, 1080, 1074, 1077, 1090]
print(codes)генерация данных python (генерация данных в python)
[1055, 1088, 1080, 1074, 1077, 1090]
Python код символа (код символа в python)
Как обработать столбец Pandas с текстом, преобразовав каждый элемент в код первого символа?
Метод .apply() или .map() с lambda-функцией:
import pandas as pd
df = pd.DataFrame({'text': ['A', 'B', 'C', 'D']})
df['code'] = df['text'].apply(lambda x: ord(x[0]) if len(x)>0 else None)
print(df)код из файла python (код из файла python)
text code 0 A 65 1 B 66 2 C 67 3 D 68
обработка данных на python (обработка данных на python)
Если в ячейке есть пустая строка, код упадёт с IndexError. Используется условие if len(x)>0 else None. Альтернатива - .str[0] для извлечения первого символа: df['text'].str[0].apply(ord), но это также может вернуть NaN для пустых строк.
Как проверить, что символ является буквой кириллицы по его коду?
Коды кириллицы находятся в диапазонах: заглавные (А-Я) - 1040–1071, строчные (а-я) - 1072–1103. Проверка:
ch = 'Ф'
code = ord(ch)
if 1040 <= code <= 1071 or 1072 <= code <= 1103:
print(f"{ch} - кириллическая буква")обработка символьных данных python (обработка символьных данных в python)
Ф - кириллическая буква
Python преобразование в строку (преобразование в строку в python)
Как преобразовать столбец Pandas с кодами обратно в символы?
Применение chr() через apply или map:
df = pd.DataFrame({'code': [65, 66, 67]})
df['char'] = df['code'].apply(chr)
print(df)Python как проверить строку (проверка строки в python)
code char 0 65 A 1 66 B 2 67 C
как работать с данными в python (работа с данными в python)
Если значение кода выходит за пределы допустимого диапазона Unicode (0–0x10FFFF), возникает ValueError. Стоит предварительно валидировать данные: lambda x: chr(x) if 0 <= x <= 0x10FFFF else None.
Как получить код эмодзи (символа из дополнительной плоскости Unicode)?
Эмодзи часто занимают два кодовых пункта (суррогатная пара), но ord() корректно возвращает полный Unicode-код при условии, что Python 3 и символ передан как один элемент строки.
emoji = "?"
print(hex(ord(emoji))) # 0x1f600Python наборы данных (наборы данных в python)
0x1f600
При попытке взять эмодзи как часть строки, полученной из внешнего источника, может возникнуть ошибка индексации, если эмодзи представлен суррогатной парой. Рекомендуется использовать next(iter(text)) или нормализацию строки.
Расширенные примеры использования ord() и chr()
Пример 1. Генерация таблицы символов ASCII
Вывод символов от 32 до 126 включительно (печатные символы ASCII).
for code in range(32, 127):
print(f"{code:3d} -> {chr(code)}")
32 -> 33 -> ! 34 -> " ... 126 -> ~
Пример 2. Фильтрация строк Pandas по диапазону кодов символов
Оставить только те строки, в которых каждый символ является цифрой (коды 48-57).
import pandas as pd
df = pd.DataFrame({'value': ['123', '12A', '456']})
def is_digit_string(s):
return all(ord(c) in range(48, 58) for c in s)
df_filtered = df[df['value'].apply(is_digit_string)]
print(df_filtered)
value 0 123 2 456
Пример 3. Создание нового столбца с кодами всех символов (как список)
df = pd.DataFrame({'word': ['cat', 'dog', 'bird']})
df['codes'] = df['word'].apply(lambda w: [ord(c) for c in w])
print(df)
word codes 0 cat [99, 97, 116] 1 dog [100, 111, 103] 2 bird [98, 105, 114, 100]
Пример 4. Преобразование кодов в символы с проверкой допустимости
Применение chr() с val= None для недопустимых кодов.
codes = [65, 20013, 1114112, -1]
def safe_chr(code):
if isinstance(code, int) and 0 <= code <= 0x10FFFF:
return chr(code)
return None
result = [safe_chr(c) for c in codes]
print(result) # ['A', '中', None, None]
['A', '中', None, None]
Пример 5. Обработка пустых строк и NaN в Pandas
import pandas as pd
import numpy as np
df = pd.DataFrame({'text': ['Hello', '', np.nan, 'Hi']})
df['first_code'] = df['text'].apply(
lambda x: ord(x[0]) if isinstance(x, str) and len(x) > 0 else None
)
print(df)
text first_code 0 Hello 72.0 1 NaN 2 NaN NaN 3 Hi 72.0
Пример 6. Использование ord() в условной выборке (замена символа по коду)
Заменить все строчные буквы на заглавные через работу с кодами.
text = "Hello, World!"
result = ''.join(
chr(ord(ch) - 32) if 'a' <= ch <= 'z' else ch
for ch in text
)
print(result) # HELLO, WORLD!
HELLO, WORLD!
Пример 7. Пакетная обработка DataFrame с эмодзи
Извлечение кода эмодзи из столбца (если ячейка состоит из одного эмодзи).
df = pd.DataFrame({'emoji': ['?', '❤️', '?', 'text']})
# Определяем, является ли строка одиночным эмодзи (длина 1 или суррогатная пара)
def get_emoji_code(s):
if isinstance(s, str) and len(s) == 1:
return ord(s)
elif isinstance(s, str) and len(s) == 2 and 0xD800 <= ord(s[0]) <= 0xDBFF:
# суррогатная пара: объединяем
return 0x10000 + (ord(s[0]) - 0xD800) * 0x400 + (ord(s[1]) - 0xDC00)
return None
df['code'] = df['emoji'].apply(get_emoji_code)
print(df)
emoji code 0 ? 128512 1 ❤️ 65039 (но здесь ❤ это один символ U+2764, а вариационный селектор U+FE0F даёт длину 2) 2 ? 128640 3 text None
Примечание: Работа с эмодзи сложна из-за комбинирующих символов. Для точной обработки рекомендуется использовать библиотеки типа emoji или unicodedata.