2016-11-07 7 views
-2

У меня возникают проблемы с извлечением чисел из строки, чтобы создать новое поле, используя полевой калькулятор в ArcGIS. Выделенные значения должны оставаться в виде строки. Проблема, с которой я сталкиваюсь, заключается в том, что не существует последовательности в количестве символов, предшествующих и следующих за номерами, которые я хочу извлечь. Единственная последовательность внутри строки - это запятая, которая следует за желаемым числом.For и While Loop для извлечения части строки

Пока мой код выглядит следующим образом:

def get_num_from_string(string): 
    num = '' 
    for i in string: 
     if i in '1234567890': 
      num+=i 
    return num 

Этот код неудачный в достижении своей цели, мне нужен код, чтобы пройти через каждый символ в строке и возвращать только цифры до запятой не будет достигнута. Например, если исходной строкой является «River Lot 489, 11756 MB CODE», я хочу, чтобы моя строка вывода читалась «489».

+0

Что именно делает * «цифру, которые следуют моему желательным тем, давая мне неправильные значения» * означает? Дайте [mcve]. – jonrsharpe

+0

Я не уверен, что понимаю, почему вы думаете, что цикл while будет более подходящим для итерации по конечной длине символов в строке –

+0

Извините, я начинающий пользователь Python, так простите мою наивность. Я имею в виду @jonrsharpe, есть числа в данных, которые появляются после чисел, которые я пытаюсь извлечь из оригинала. Например: «River Lot 489, 127756 MB CODE» Я хочу, чтобы мой выход, чтобы быть просто «489» – Husters

ответ

1

Предположим, у вас есть строки

test = "12hel34l0" 

Чтобы получить все цифры в строке, просто сделать

>>>> print([d for d in test if d.isdigit()]) 
['1', '2', '3', '4', '0'] 
>>>> 

Если вы хотите, чтобы быть строка снова вместо списка, используйте join

>>>> print(''.join([d for d in test if d.isdigit()])) 
12340 
>>>> 

Редактировать:

"River Lot 489, 127756 MB КОД" Я хочу, чтобы мой выход, чтобы быть просто "489"

Чтобы соответствовать этому, я просто изменить следующий метод test.split(",")[0]. Вы должны предоставить больше информации о том, как выглядят ваши данные, и если вы хотите получить цифры перед первой запятой каждый раз.

Реализован в вашем методе.

def get_num_from_string(string): 
    return ''.join([d for d in test.split(",")[0] if d.isdigit()]) 

Тестирование вашего предложенного пример

>>>> test = "River Lot 489, 127756 MB CODE" 
>>>> print(get_num_from_string(test)) 
489