2015-07-11 99 views
1

我想在文件中搜索确切的变量,但无法这样做。即如果我在文件中搜索'akash',则包含akash的所有行都会返回,即使它们仅包含'akashdeep'而不包含'akash'。使用python在文本文件中搜索确切的变量

__author__ = 'root' 
def userinGroups(userName): 
    with open('/etc/group','r') as data: 
     associatedGroups=[] 
     for line in data: 
     if userName in line: 
      associatedGroups.append(line.split(':')[0]) 
    return associatedGroups 

print userinGroups('akash') 

该函数只能返回包含'akash'而不包含'akashdeep'的行。 我试过使用re模块,但找不到任何变量已被搜索的例子。 我也试过:

for 'akash' in line.split(':') 

但在这种情况下,如果一个行包含多组条目,然后失败。

+0

所以,你想'如果用户名+':'在行:'? – TigerhawkT3

+0

@ TigerhawkT3,这将失败的行尾 –

+0

@Padraic'如果有(用户名+ n在(':','\ n')中的n行):? – TigerhawkT3

回答

0

使用正则表达式,你可以用re.search:

def userinGroups(userName): 
    r = re.compile(r'\b{0}\b'.format(userName)) 
    with open('/etc/group', 'r') as data: 
     return [line.split(":", 1)[0] for line in data if r.search(line)] 

或者使用子进程运行组命令:

from subprocess import check_output 
def userinGroups(userName): 
    return check_output(["groups",userName]).split(":",1)[1].split() 
+0

我试过这个,但是如果在一个组中有更多的用户,这个解决方案就会失败[akash,user2,user3 ]这里的用户存在,但仍然不会显示考虑下面的文件行,你正在寻找'akashdeep'aaronituser:x:512:akashdeep,anamika,parvinder,amit – thinkingmonster

0

嗨已经找到解决我的问题,谁回答所有成员的帮助到这个帖子。这里去最终的解决方案

__author__ = 'root' 
import re 

def findgroup(line,userName): 
    result=re.findall('\\b'+userName+'\\b',line) 
    if len(result)>0: 
     return True 
    else: 
     return False 


def userinGroups(userName): 
    with open('/etc/group','r') as data: 
     associatedGroups=[] 
     for line in data: 
     if findgroup(line,userName): 
      associatedGroups.append(line.split(':')[0]) 
    return associatedGroups 



print userinGroups('akas')