使用python词典时没有生成输出

时间:2012-05-22 07:30:03

标签: python dictionary pattern-matching default-value string-matching

我正在尝试匹配两个txt文件,然后在名为tmp的python字典中保存匹配位置的索引。

现在我正在尝试根据字典打印起始索引和结束索引之间的内容。

字典中缺少某些键/值,因此我使用了默认值 但是现在当我尝试使用line [s:e]打印所需的结果时,它会给我一个空白输出

虽然有默认值..

希望我能解释自己..

请查看代码..

代码类型= Python

 import re

 content_file = open('/Users/ashishyadav/Downloads/pdfminer-20110515/samples/te.txt',"r")
 product_file = open('/Users/ashishyadav/Desktop/AQ/te.txt',"r")
 output = open("output.txt" , "w")
 line = content_file.read().lower().strip()
 tmp = {}
 default=99
 for k in tmp:
    tmp[k]=default

 prev=''
 for prod in product_file:
   for match in re.finditer(prod.lower().strip(), line):
           prod = prod.replace("\r","")
           prod = prod.replace("\n","")
           if(prev!=''):
                   tmp[prev,'end_index']=match.start()
           tmp[prod,'start_index']=match.start()
           s=match.start()
           e=match.end()
           prev=prod
           #print >>output, match.group(),"\t",
           #print >>output, '%d:%d' % ( s, e),"\n",        
           #print >>output, tmp,"\n"

^^这是将索引位置保存到名为tmp

的字典中
 from collections import defaultdict
 tmp = defaultdict(lambda:99,tmp)
 print tmp
 print tmp[('Steakhouse Filet Salad', 'end_index')]
 print tmp[('FRIED PICKLES', 'end_index')]
 print tmp[('TEXAS T-BONE', 'end_index')]

Steakhouse Filet Salad的默认值现在为99,因为它不在词典中

 for prod in product_file:
    for match in re.finditer(prod.lower().strip(), line):
        prod = prod.replace("\r","")
            prod = prod.replace("\n","")
            print line[s:tmp[(prod,'end_index')]]

此打印行[s:tmp [(prod,'end_index')]] 之前给出了一个keyerror,但是现在默认值是99它应该接受并给我一些结果但是没有产生输出。

1 个答案:

答案 0 :(得分:0)

sline[s:tmp[(prod,'end_index')]]的含义是什么?追溯其定义并考虑下一个Python行为:

>>> l = [1,2,3]
>>> print l[10:1]
[]

现在你应该能找到你的错误了。