2013-06-18 3 views
3

Я довольно новичок в python. У меня есть вопрос. Скажем, например, когда я читаю строку из файла, у меня есть строка, которая выглядит так.Как удалить все нецелые числа из строки? (Python)

thestring = '000,5\r\n' 

Как удалить все нецелые числа из этой строки, а затем преобразовать эту строку в само целое? Благодаря!

+4

вы должны быть в состоянии прочитать негативов, шестигранник ('0xFFFFFF') или поплавки (' -592.45821543e + 04' Do)? – AJMansfield

+0

Просто nitpicking, но вы не хотите удалять _non-integers_, но _non-digits_ –

ответ

11

Использование str.translate, это, вероятно, самый быстрый способ сделать это:

>>> strs = '000,5\r\n'  
>>> from string import ascii_letters, punctuation, whitespace 
>>> ignore = ascii_letters + punctuation + whitespace 
>>> strs.translate(None, ignore) 
'0005' 

Использование regex:

>>> import re 
>>> re.sub(r'[^\d]+','',strs) #or re.sub(r'[^0-9]+','',strs) 
'0005' 

Использование str.join и str.isdigit:

>>> "".join([x for x in strs if x.isdigit()]) 
'0005' 

Использование int(), чтобы получить целое число:

>>> int('0005') 
5 

Зубчатые сравнений:

>>> strs = strs*10**4 
>>> %timeit strs.translate(None, ignore) 
1000 loops, best of 3: 441 us per loop 

>>> %timeit re.sub(r'[^\d]+','',strs) 
10 loops, best of 3: 20.3 ms per loop 

>>> %timeit re.sub(r'[^0-9]+','',strs) 
100 loops, best of 3: 17.1 ms per loop 

>>> %timeit "".join([x for x in strs if x.isdigit()]) 
10 loops, best of 3: 19.2 ms per loop 
+0

Или переведите, если вам нужно что-то немного быстрее. – placeybordeaux

+0

@ PeterMichealLacey-Bordeaux решение обновлено. –

+0

Большое спасибо! Теперь предположим, что моя моя строка «0005». Как я могу изменить свою строку так, чтобы она теперь читала «5000»? – Binka

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