-1

2 つの txt ファイルを照合し、一致した場所のインデックスを tmp という python 辞書に保存しようとしています。

今、辞書に基づいて開始インデックスと終了インデックスの間のコンテンツを印刷しようとしています..

ディクショナリに一部のキー/値が欠落していたため、デフォルト値を使用しましたが、現在、行 [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')]

ステーキハウス フィレ サラダのデフォルト値は 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 に答える