使用python在文本文件中搜索确切的变量

时间:2015-07-11 09:26:42

标签: python regex

我正在尝试在文件中搜索确切的变量但不能这样做。即如果我在文件中搜索'akash',则返回包含akash的所有行,即使它们只包含'akashdeep'而不是'akash'。

__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(':') 

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

2 个答案:

答案 0 :(得分: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)]

或使用子进程运行groups命令:

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

答案 1 :(得分: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')