2015-07-11 109 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')