2016-09-19 3 views
0

このプログラムは、テキストファイルの大きなディレクトリを読み取ります。各ファイルは、特定の文字列(正確に小数点以下2桁のドル金額)が検索されます。 私は特定の金額がテキストファイルであるかどうかを判断するためにある目的は、次のコードを実行しています:Python 3.xでの辞書から厳密な文字列検索

d = {} 
with open('numbers.txt') as f: 
    d = dict(x.rstrip().split(None, 1) for x in f) 

import os 

for filename in os.listdir(os.getcwd()): 
    string = d.get(filename, "[email protected]#$%^&*") 
    if string in open(filename, 'r').read(): 
     with open("outfile.txt", 'a') as out: 
      out.write("{} {} {}\n".format(filename, string, 1)) 
    else: 
     with open("ibes_in.txt", 'a') as out: 
      out.write("{} {} {}\n".format(filename, string, 0)) 

numbers.txtは、ファイル名(.txtファイル)と金額のリストが含まれています。ドル金額の文字列は、ファイル名のファイルに含まれているか、またはそれらの文字列ではありません。

ほとんどの場合、このコードは2桁以上のセントを持つ数字に一致するものを見つける以外は完全に機能します。たとえば、検索文字列が1.42の場合、1.423と一致させたくありません。

検索文字列は、サンプル入力1.42

である場合はtrue

サンプル入力:

サンプル結果 "会社がの... $ 1.42を報告しました" "同社は1.427の成長を見た..."

サンプル結果:偽

ドル記号の使用は普遍的なものではなく、負の数を示すために数字が()で囲まれていることがあります。私は正規表現\ bが2桁の終わりをマークする正しい方法だと信じていますが、すでに持っているコードでそれをどのように実装するのか分かりません。確かに、あなたは正規表現と\bでこれを行うことができます

答えて

0

if re.search('\\b' + re.escape(string) + '\\b', open(filename, 'r').read()): 
+0

が、これはオープン(ファイル名、 'R')で>>>>かの文字列を置換していただきありがとうございます(読み取り)。:?他の変更が必要ですか? – prizmracer11

+0

それは実際にそれを置き換え、他の変更は必要ありません。 – trincot

関連する問題