-1

我正在尝试匹配两个 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 它应该接受它并给我一些结果但没有生成输出。

4

1 回答 1

0

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

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

现在您应该能够找到您的错误。

于 2012-05-22T07:47:51.810 回答