2015-01-09 4 views
0

Я работаю над программой, которая читает RFID-карту, а затем извлекает информацию о этой карте из базы данных. Я использую Python с MySQL для этого, но для того, чтобы он работал, мне нужно преобразовать строку, например. "2345d566k", до инт. Мне не нужны буквы, чтобы быть там, только цифры.Преобразование строки текста, содержащей числа и буквы, в int

, когда я делаю следующее:

test = "2345d566k" 
test2 = int(test) 

возвращается: ValueError: invalid literal for int() with base 10: '2345d566k'

Как я могу преобразовать эту строку в междунар?

+0

Uh ..... Что вы ищите? –

+1

Чтобы развернуть выше, что вы ожидаете от вывода для ввода «2345d566k»? –

ответ

3

Предполагая, что вы хотите игнорировать, кроме цифр, символов, простое решение будет

test = "ab23cd56e3f" 
test2 = int(filter(lambda x: x.isdigit(), test)) 
#test2 is now 23563 

filter() применяет функцию isdigit() для каждого символа строки, сохраняя только те, которые являются цифрами. Затем вы можете безопасно позвонить int(), чтобы преобразовать результат в целое число.

Как указано в комментариях, это будет работать только в том случае, если каждая строка текста, которую вы хотите преобразовать, содержит не менее 1 цифры.

+1

Это будет работать нормально, пока вы не получите либо карту, которая имеет только нечисловые символы, либо две карты, которые отличаются только нечисловыми символами. –

+0

@ Ignacio: Я сомневаюсь, что OP хочет использовать это как средство различения RFID-карт. Однако вы правы в отношении нечисловой части. – VHarisop

+0

", а затем извлекает информацию об этой карте из базы данных« Я бы сказал, что это считается «отличительным». –

5

Вы можете легко использовать регулярное выражение для этого

import re 

"".join(re.findall('\d', "ab23cd56e3f")) 

Он будет анализировать все числовые цифры от заданной строки, если вы поставите \D вместо \d это приведет все алфавиты.

Смежные вопросы