2017-10-18 16 views
1

CSVリーダーで辞書を作成していますが、列Aに元の名前があり、列Bには名前が更新されています。辞書キーの文字列を検索して値に置き換える方法

dict[key] = {value} 

私はデータベースから値を選択しています。目的は、キーを使用してその文字列を検索し、値で置き換えることです。

最終的にUPDATEステートメントで更新されます。しかし、文字列に 'key'のインスタンスが含まれておらず、値が 'value'の場合は、更新からスキップされ、dictに渡されない場合、チェックが行われることが重要です。

文字列を検索するにはどうすればよいですか?重複した置換が行われているためです。文字列全体に「大文字と小文字を一致させたい」とします。

name = 'de testing  nl testing  es testing_updated  en testing_updated  it testing  fr testing_updated' 
dict["testing"] = {"testing_updated"} 
for key,value in dict.items(): 
    if str(key) not in name and list(value)[0] in name: 
     print("{} has already been replaced with {}".format(key,value)) 
    else: 
     name = name.replace(str(key),list(value)[0]) 
     print(name) 

出力:

de testing_updated  nl testing_updated  es testing_updated_updated  en testing_updated_updated  it testing_updated  fr testing_updated_updated 

チェックが渡され、名前が(それがされていない)適切に更新され、最終的にそれが新しい辞書に渡されていますし、次に辞書は、SQL UPDATEステートメントをコンパイルするために使用されている場合。

答えて

0

"testing_updated"に置き換えた場合、結果の文字列には文字列"testing"が含まれているため、更新されたことを確認できません。

"testing ""testing_updated "のように後ろの空白やタブを使用することもできますが、実際のデータによっては、すべての場合に機能しない場合があります。

私が正しく理解していれば、更新された要素と更新されていない要素が含まれている文字列が1つあります。この場合、文字列を含む要素に最初にstr.splitを使用して分割し、要素を個別に処理する必要があります。 、あなたは文字列「AB」を持っていると順番に検索/置換を適用する場合は、あなたの文字列が終わるアップ「CC」で 1 A B 2 B C ....

ない:

0

の言い方をすれば、あなたはCSVで交換手順のリストを持っています"紀元前"。

  1. は、すべての検索し、すべての置き換えを行います。

    あなたは回避するには、2つの方法があります。メインループがないので、2が面白いです 1 A DISTINGUISH_A 2 B DISTINGUISH_B .... .... 11 DISTINGUISH_A B 12 DISTINGUISH_B C

ウェイ:それはあなたが

  • は、入力文字列に存在しないキーを導入するあなたの指示を修正作品にあなたの入力文字列をカットする必要があるとして実装するのは非常に難しいのです変化しない:検索と置換のシーケンス。また、変更された命令の準備も自動化できます。

  • +0

    私のcsvはあなたが説明したようなものではありません。 これはold_text、new_textのペアです。 のように: カセット、テープ 犬、猫 それはないだろう。 カセット、テープ テープ、duct_tape – oj43085

    +0

    oj43085 @行番号を忘れて、私たちは同じことを言っています。あなたはアイデアを得ますか? – Setop

    関連する問題