複数の行のレコードを含む構造化テキストファイルがあります。各レコードにはキー固有のフィールドが必要です。私は、一連のこれらのファイルを読んで、一意でないキーフィールドを見つけてキー値を一意の値に置き換える必要があります。正規表現を使用してテキストファイル内の複数のエンティティを置換する
私のスクリプトは、置き換えが必要なすべてのフィールドを識別しています。これらのフィールドは、キーが一意でないフィールドである辞書に格納され、値は一意の値のリストです。
例:私は「1111111111」(dictのキー)と、最初のキー値を持つ最初のマッチを置き換えるのインスタンスを見つけ、一度だけ、各ファイルを介して読み込まれやりたい何
{
"1111111111" : ["1234566363", "5533356775", "6443458343"]
}
、2試合目2番目のキー値を持つなど
私は正規表現を使用しようとしていますが、私は、ファイルをループせずに、適切なREを構築する方法を確認していない複数回
これは私の現在のコードです:
def multireplace(Text, Vars):
dictSorted = sorted(Vars, key=len, reverse=True)
regEx = re.compile('|'.join(map(re.escape, dictSorted)))
return regEx.sub(lambda match: Vars[match.group(0)], Text)
text = multireplace(text, find_replace_dict)
これは、単一のキーのために正常に動作します:値の組み合わせが、場合、コンパイルに失敗します:値がリストである:
return regEx.sub(lambda match: Vars[match.group(0)], Text , 1)
TypeError: sequence item 1: expected str instance, list found
ファイルを介して複数回ループすることなく、機能を変更することができますか?
これで私のために失敗している はIndexErrorを:空のリスト私は取得しています – theObserver
からポップopを含むファイルからのテキストen(full_file_path、 'r')をf:text = f.read()として返します。その後、dictを使ってreplace関数にテキストを渡します。あなたのコードは1行のテキストではうまくいくようです。 – theObserver
'IndexError:pop from empty list'を取得している場合は、その特定の文字列の置換えが不足しているようです。 (それらはすべて既に使用されていました) – smarx