在python中搜索特定的字符串

时间:2014-03-13 13:45:18

标签: python file python-2.7

我有一个包含类似于给定格式的数据的特定文件

Name  :  Neha xxxxx
Title  :  ENGINEER.xxxxx xxxxxx
Employee number  :  27xxx
Status : Active
User ID :  nehxxx
Manager ID  :  xxxx
Manager : Krisxxxxxxxx

这个数据将被顺序插入到数据库中。为此,我首先通过以下代码构建列表

filename = "LDAPFile.txt"
lines = open(filename).read().splitlines()

#print lines
for item in lines:
    if('Name') in item:
        Name = item.split(':')[1]
        #print Name[1]
    if('Title') in item:
        Title = item.split(":")[1]
        #print Title[1]
    if('Employee number') in item:
        ENO = item.split(":")[1]
        #print ENO
    if('Status') in item:
        Status = item.split(":")[1]
        #print Status
    if('User ID') in item:
        UID = item.split(":")[1]
        #print UID
    if('Manager ID') in item:
        MID = item.split(":")[1]
        #print MID
        #print len(MID)
    if('Manager') in item:
        MANAGER = item.split(":")
        print MANAGER
        #print len(MANAGER)

但是,如果项目中的('经理')导致经理ID和经理。我如何专门搜索经理?

4 个答案:

答案 0 :(得分:4)

您可以做的最小改变是:

if item.startswith("Manager :"):

这样效率很高,因为您不必搜索整个字符串,并且会避免在其他位置找到相同的字符串。

但是,您可以按如下方式改进整个代码:

data = {}
for item in lines:
    try:
        key, value = item.split(":")
    except ValueError:
        pass # ignore line - not in expected format
    else:
        data[key.strip()] = value.strip()

您现在可以访问data词典

中的字段
data["Manager"] ...

答案 1 :(得分:1)

使用来自re的Python的正则表达式来实现这一目标。在下面的示例中,它会检查未跟随" ID"

的Manager
if re.match("Manager(?!\s+ID)", item):

请记住,此示例仅对您的方案有效。

答案 2 :(得分:1)

为什么不首先拆分行:

for item in lines:
    parts = item.split(':')
    if parts[0].strip() == "Manager":
        # process the item

答案 3 :(得分:0)

我认为使用正则表达式会更容易。所以我要做的是以下几点:

import re

# create a list to save the whole file in it

inf = open(filename, "r")
read = inf.readlines()
inf.close

for l in read:
    mat1 = re.search(r'Manager ID',l,re.M)
    mat1 = re.search(r'Manager ID',l,re.M)
    if mat1:
     MID = l.split(":")[1]
    elif mat2:
     Manager = l.split(":")