2015-10-16 13 views
0

我有一個查詢,它返回我們更大的應用程序中特定應用程序的用戶安全設置。Python - 從字符串獲取多個字符

誰設置表所做的所有的安全設置的人適合於一個領域,而不是定義各個字段,所以我繞了一個斑點,看起來像這樣:

NNYYNYNN NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNYNNNNY

每個那些對應於個人設置。 我知道如何使用字符串切片來獲取單個字段。

我想知道的是,如果我返回這個blob,有沒有辦法說出15,25和48個字符?我也可以設置查詢來做substr()並獲取我想要的字符,我只是想知道是否有Python方式來做到這一點。我寧願不必設置多個查詢,因爲上面的示例是我必須使用的大約20個不同的應用程序之一。

+0

在字符串的第十五位置的字符's'作爲單曲[14]'訪問。這不是你想要的嗎? –

回答

2

你可以使用namedtuples給您的安全策略命名值。例如,假設您的字符串爲三個字符,每個位置的含義爲read,writeexecute。此外,我假設你的字符串YN分別表示是和否。因此,你可以做這樣的事情:

from collections import namedtuple 
Security = namedtuple('Security', ['read','write','execute']) 
policy_string = 'YYN' # read = Yes, write = Yes, execute = No 
policy = Security(*[c for c in policy_string]) 
print policy 

這將打印

Security(read='Y', write='N', execute='N') 

然後,您可以各自是通過索引或符號名稱設置訪問。例如:

>>> policy[0] 
'Y' 
>>> policy.read 
'Y' 

很明顯,您會根據所有48個安全策略的文本描述來修改此示例。

https://docs.python.org/2.7/library/collections.html#collections.namedtuple

2

爲了快速提取,你可以做這樣的事情:

a, b, c = your_str[14], your_str[24], your_str[47] 

,或者你可以寫一個函數:

def get_bits(settings, indices): 
    return [settings[i] for i in indices] 
+0

如果你想要第15,25和48個字符,最好使'a,b,c = your_str [14],your_str [24],your_str [47]'。您正在使用基於1的索引; Python不是。 –

+0

我的意思是從0開始的第15個字符,但是如果你願意,我可以修復它。 – DuXeN0N

+0

謝謝你們,我會看看這個給它一個去。 – DarthOpto