2015-07-11 3 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

Итак, вы хотите, чтобы 'if userName + ':' в строке:'? – TigerhawkT3

+0

@ TigerhawkT3, что не удастся для имен в конце строки –

+0

@Padraic 'if any (имя_пользователя + 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') 
Смежные вопросы