我有一个包含类似于给定格式的数据的特定文件
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和经理。我如何专门搜索经理?
答案 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"
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(":")