2016-11-07 82 views
-2

我遇到的問題是從字符串中提取數字以使用ArcGIS中的字段計算器創建新字段。被提取的值必須保持爲一個字符串。我遇到的問題是,在我想要提取的數字前後的字符數目不一致。字符串中唯一的一致性是一個符合所需數字的逗號。For和While循環提取字符串的一部分

到目前爲止,我的代碼如下:

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是數據中的數字,是我試圖從原始數據中提取的數字。 例如: 「河地塊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 
>>>> 

編輯

「河地塊489,127756 MB CODE」 我希望我的輸出僅僅是 「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