2012-12-28 56 views
0

新手问题,我有以下代码,我需要将变量gerrit中的数据与列表gerrit_refs进行匹配,并获取相应的匹配并保存在变量中,我该怎么做那?将变量匹配到列表并保存匹配

''' 
gerrit_refs: 
refs/changes/89/202089/4 
refs/changes/39/205739/2 
refs/changes/94/195594/6 
refs/changes/90/202090/4 
refs/changes/92/202092/4 
''' 

def main(): 
    gerrit=205739 
    with open('gerrit_refs.txt', 'r') as f: 
     # Here we make a list of refs based on the file 
     gerrit_refs = [line.strip() for line in f] 
    match = None 
    for ref in gerrit_refs: 
     if gerrit in ref: 
      match = ref 
      print match 
      break 

if __name__ == '__main__': 
    main() 

错误: -

类型错误: '在' 要求的字符串作为左操作数,而不是在

+0

为什么你用二进制模式打开的文件(“RB”,而不是“R”)?看起来像这个文件只包含ASCII字符。 –

+0

@NickODell - 我更新了我所尝试的,这是一个编译错误 – user1927396

+0

@ user1927396你确定这是整个错误信息吗? –

回答

1

中筛选出匹配的行您的列表理解:

def main(): 
    gerrit = 205739 
    gerrit_str = str(gerrit) 
    with open('gerrit_refs.txt', 'rb') as f: 
     # Here we make a list of refs based on the file 
     gerrit_refs = [line.strip() for line in f if gerrit_str in line] 

    if gerrit_refs: 
     # At least one match was found. 
     print gerrit_refs 

注意到,有必要将gerrit搜索变量更改为字符串。 in运算符不适用于混合变量。

这将工作,如果有多个引用,因为它返回一个列表。如果你只是想抓住的第一场比赛,然后只需提取第一项:

if gerrit_refs: 
    print "First match:", gerrit_refs[0] 
+0

上面的代码输出是像['refs/changes/39/205739/2']的列表格式,输出应该像refs/changes/39/205739/2,请提供输入 – user1927396

+0

更新我的答案 - 它只是一个问题从列表中提取第一个元素。 – Blair

+0

我不想将gerrit转换为字符串,有没有办法作出修改,并保持gerrit = 205739,而不是gerrit =“205739” – user1927396

1
next((l.strip() for l in open('gerrit_refs.txt') if str(gerrit) in l), False)