2015-10-16 34 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