2016-03-29 7 views
-4

置換のリスト(http://pastebin.com/JH932Qxi) と(http://pastebin.com/RSwdWiKy)を置換するために必要なリストがあります。交換用 ルール:リストによる複数の単語の置換 - 複製の作成

S1000005 = S1000005,S1000006,S1000010 
S1000007 = S1000007,S1000008 
S1000009 = S1000009 
S2000005 = S2000005,S2000006,S2000007,S2000008 
S2000009 = S2000009,S2000010 
S3000005 = S3000005,S3000010 
S3000006 = S3000006,S3000008 
S3000007 = S3000007,S3000009 

入力行:

S1000005 S2000005 S3000005 
S1000006 S2000006 S3000006 
S1000007 S2000007 S3000007 
S1000008 S2000008 S3000008 
S1000009 S2000009 S3000009 
S1000010 S2000010 S3000010 

結果はこのhttp://pastebin.com/8BkRFC87ようにする必要があります。

出力例:私はこの使用してメモ帳を++(それは時間をたくさん保存されて)行っているが、完全に自動化することが可能である

S1000005 S2000005 S3000005 
S1000005 S2000005 S3000006 
S1000007 S2000005 S3000007 
S1000007 S2000005 S3000006 
S1000009 S2000009 S3000007 
S1000005 S2000009 S3000005 

。 (最初は、ブックマーク行の置換を使用し、3列を戻すよりも、行に分割します)。

代替品のリストを読んで代替品を作成するにはどうすればよいですか?辞書を使って重複のリストを置き換える方法

「S1000005、S1000006、S1000010、S1000011、S1000022、S1000023、S1000024、S1000025、S1000056」を検索し、それぞれを「S1000005」で置き換えるテキストエディタがありますか?

+4

: 他の正規表現エンジンはこれを受け入れることができます。すべての外部リンクなしで必要なものの小さな例を作成します。 – ChrisP

+1

どの言語をお探しですか?あなたはこの種のもののためにPythonとTclの組み合わせを使用することはありません。それは馬鹿げた渦巻きです! –

+0

@DonalFellows私はPythonやTCLが好きです。 – XuMuK

答えて

1

dictionnary {置換される:代替}を取得し、ここで

with open('input2') as ifd, open('output', 'w') as ofd: 
    for line in ifd: 
     ofd.write(' '.join(replace.get(idt, idt) for idt in line.split())) 

replace = {} 
with open('input1') as fd: 
    for line in fd: 
     head, tail = line.split('=') 
     for idt in tail.split(','): 
      replace[idt] = head 

書き込み置換を有する第二のファイルinput2outputコンテンツ内の最初のファイルからdict.getメソッドは、識別子の置換を取るために使用され、識別子自体は、辞書には存在しない場合に使用されます。 Vimのテキストエディタで

は、S1000005S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056を交換するための正規表現は次のとおりです。

他のテキストエディタの下
%s/S1000005\|S1000006\|S1000010\|S1000011\|S1000022\|S1000023\|S1000024\|S1000025\|S1000056/S1000005/g 

、一部の文字はエスケープ\を必要とすることができます。使用されている正規表現エンジンに依存します。あなたがしようとしているかを示すと動作しませんでしたか説明してください

s/{S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056}/S1000005/g 
+0

vimエディタでの置換は、迅速で洗練されたソリューションです。しかし、私はPythonコードを動作させようとします。 – XuMuK

+0

このコードを使用すると、2種類のエラーが生成されます。TypeError:文字バッファオブジェクト(Pythin 2.7)およびTypeError:write()の引数は、ジェネレータ(3.5)ではなくstrでなければなりません。 – XuMuK

+0

申し訳ありませんが、私は '.join'を忘れてしまいました。今修正されました。 – aluriak

関連する問題