0

辞書がある場合:

mydict = {"g18_84pp_2A_MVP1_GoodiesT0-HKJ-DFG_MIX-CMVP1_Y1000-MIX.txt" : 0,
          "g18_84pp_2A_MVP2_GoodiesT0-HKJ-DFG_MIX-CMVP2_Y1000-MIX.txt" : 1,
          "g18_84pp_2A_MVP3_GoodiesT0-HKJ-DFG_MIX-CMVP3_Y1000-MIX.txt" : 2,
          "g18_84pp_2A_MVP4_GoodiesT0-HKJ-DFG_MIX-CMVP4_Y1000-MIX.txt" : 3,
          "g18_84pp_2A_MVP5_GoodiesT0-HKJ-DFG_MIX-CMVP5_Y1000-MIX.txt" : 4,
          "g18_84pp_2A_MVP6_GoodiesT0-HKJ-DFG_MIX-CMVP6_Y1000-MIX.txt" : 5,
          "h18_84pp_3A_MVP1_GoodiesT1-HKJ-DFG-CMVP1_Y1000-FIX.txt" : 6,
          "g18_84pp_2A_MVP7_GoodiesT0-HKJ-DFG_MIX-CMVP7_Y1000-MIX.txt" : 7,
          "h18_84pp_3A_MVP2_GoodiesT1-HKJ-DFG-CMVP2_Y1000-FIX.txt" : 8,
          "h18_84pp_3A_MVP3_GoodiesT1-HKJ-DFG-CMVP3_Y1000-FIX.txt" : 9,
          "p18_84pp_2B_MVP1_GoodiesT2-HKJ-DFG-CMVP3_Y1000-FIX.txt" : 10}
  1. g18_84pp_2A_MVP_GoodiesT0最初の の前の共通部分を抽出したい-

  2. また、最初のグループで特定の単語を見つけるとき_MIXにフォローする a を追加したいと思います。であるかmyDict であるかに応じて 2 つのグループを分類できると仮定すると、最終的な出力辞書は次のようになります。g18_84pp_2A_MVP_GoodiesT0MIXMIXFIX

OutputNameDict= {"g18_84pp_2A_MVP_GoodiesT0_MIX" : 0,
                  "h18_84pp_3A_MVP_GoodiesT1_FIX" : 1,
                  "p18_84pp_2B_MVP_FIX": 2}

共通部分を見つけるために使用できる関数はありますか? のような特定の記号の前または後の単語を拾い上げて、またはのよう-な特定の単語を見つける方法は?MIXFIX

4

3 に答える 3

1

split共通部分を取得するために使用できます。

s = "g18_84pp_2A_MVP1_GoodiesT0-HKJ-DFG_MIX-CMVP1_Y1000-MIX.txt"
n = s.split('-')[0]

実際、 でsplit区切られた各トークンのリストが得られる'-'ため、次のようになりs.split('-')ます。

['g18_84pp_2A_MVP1_GoodiesT0', 'HKJ', 'DFG_MIX', 'CMVP1_Y1000', 'MIX.txt']

orが文字列内にあるかどうMIXかを確認するには、次を使用できます。FIXin

if 'MIX' in s:
    print "then MIX is in the string s"

の後の数字を取り除きたい場合は、モジュール'MVP'を使用できます。re

import re
s = 'g18_84pp_2A_MVP1_GoodiesT0'
s = re.sub('MVP[0-9]*','MVP',s)

共通部分のリストを取得するサンプル関数を次に示します。

def foo(mydict):
    return [re.sub('MVP[0-9]*', 'MVP', k.split('-')[0]) for k in mydict]
于 2013-07-17T14:10:49.487 に答える
1

関数を使用しindex()てダッシュを見つけることができ、その知識があれば、そのポイントを過ぎた残りの文字列を取得できます。例えば、

mydict = {"g18_84pp_2A_MVP1_GoodiesT0-HKJ-DFG_MIX-CMVP1_Y1000-MIX.txt" : 0,
          "g18_84pp_2A_MVP2_GoodiesT0-HKJ-DFG_MIX-CMVP2_Y1000-MIX.txt" : 1,
          "g18_84pp_2A_MVP3_GoodiesT0-HKJ-DFG_MIX-CMVP3_Y1000-MIX.txt" : 2,
          "g18_84pp_2A_MVP4_GoodiesT0-HKJ-DFG_MIX-CMVP4_Y1000-MIX.txt" : 3,
          "g18_84pp_2A_MVP5_GoodiesT0-HKJ-DFG_MIX-CMVP5_Y1000-MIX.txt" : 4,
          "g18_84pp_2A_MVP6_GoodiesT0-HKJ-DFG_MIX-CMVP6_Y1000-MIX.txt" : 5,
          "g18_84pp_2A_MVP7_GoodiesT0-HKJ-DFG_MIX-CMVP7_Y1000-MIX.txt" : 6,
          "h18_84pp_3A_MVP1_GoodiesT1-HKJ-DFG_MIX-CMVP1_Y1000-FIX.txt" : 7,
          "h18_84pp_3A_MVP2_GoodiesT1-HKJ-DFG_MIX-CMVP2_Y1000-FIX.txt" : 8,
          "h18_84pp_3A_MVP2_GoodiesT1-HKJ-DFG_MIX-CMVP3_Y1000-FIX.txt" : 9}

for value in sorted(mydict.iterkeys()):
        index = value.index('-')
        extracted = value[index+1:-4] # Goes past the first occurrence of - and removes .txt from the end
        print extracted[-3:] # Find the last 3 letters in the string

以下を出力します。

MIX
MIX
MIX
MIX
MIX
MIX
MIX
FIX
FIX
FIX

その後、 if ステートメントを使用して、必要なことを行うことができます。

共通部分だけを抽出したい場合。

index = value.index('-')
extracted = value[:index] # Will get g18_84pp_2A_MVP1_GoodiesT0

次に、使用するエンディングを把握します。mydict 値の末尾が常に MIX.txt または FIX.txt であることがわかっている場合は、これを行うことができます。

for value in sorted(mydict.iterkeys()):
    ending = value[-7:-4]
    index = value.index('-')
    extracted = value[:index]
    print "%s_%s" % (extracted, ending)

どのプリント

g18_84pp_2A_MVP1_GoodiesT0_MIX
g18_84pp_2A_MVP2_GoodiesT0_MIX
g18_84pp_2A_MVP3_GoodiesT0_MIX
g18_84pp_2A_MVP4_GoodiesT0_MIX
g18_84pp_2A_MVP5_GoodiesT0_MIX
g18_84pp_2A_MVP6_GoodiesT0_MIX
g18_84pp_2A_MVP7_GoodiesT0_MIX
h18_84pp_3A_MVP1_GoodiesT1_FIX
h18_84pp_3A_MVP2_GoodiesT1_FIX
h18_84pp_3A_MVP2_GoodiesT1_FIX

次に、抽出した辞書に追加します。

于 2013-07-17T14:20:10.583 に答える
0

答えてくれてありがとう。次のような私の完全なコード。それを最適化するための提案はありますか?

import re

mydict = {"g18_84pp_2A_MVP1_GoodiesT0-HKJ-DFG_MIX-CMVP1_Y1000-MIX.txt" : 0,
          "g18_84pp_2A_MVP2_GoodiesT0-HKJ-DFG_MIX-CMVP2_Y1000-MIX.txt" : 1,
          "g18_84pp_2A_MVP3_GoodiesT0-HKJ-DFG_MIX-CMVP3_Y1000-MIX.txt" : 2,
          "g18_84pp_2A_MVP4_GoodiesT0-HKJ-DFG_MIX-CMVP4_Y1000-MIX.txt" : 3,
          "g18_84pp_2A_MVP5_GoodiesT0-HKJ-DFG_MIX-CMVP5_Y1000-MIX.txt" : 4,
          "g18_84pp_2A_MVP6_GoodiesT0-HKJ-DFG_MIX-CMVP6_Y1000-MIX.txt" : 5,    
          "h18_84pp_3A_MVP1_GoodiesT1-HKJ-DFG-CMVP1_Y1000-FIX.txt" : 6,    
          "g18_84pp_2A_MVP7_GoodiesT0-HKJ-DFG_MIX-CMVP7_Y1000-MIX.txt" : 7,
          "h18_84pp_3A_MVP2_GoodiesT1-HKJ-DFG-CMVP2_Y1000-FIX.txt" : 8,
          "h18_84pp_3A_MVP3_GoodiesT1-HKJ-DFG-CMVP3_Y1000-FIX.txt" : 9,
          "p18_84pp_2B_MVP1_GoodiesT2-HKJ-DFG-CMVP3_Y1000-FIX.txt" : 10}

ExtractDict = {}
start = 0
for stringList in sorted(mydict.iterkeys()):
    stringList = stringList.split('.')[0]  
    underscore = stringList.split('_')   
    Area= re.split('[0-9]+',stringList.split('_')[3])[0] # MVP and etc.       
    CaseNameString=underscore[0]+"_"+underscore[1]+"_"+underscore[2]+"_"+Area #g18_84pp_2A_MVP_GoodiesT0 and etc.
    postfix= stringList.split('-')[4]
    Newstring= CaseNameString + "_" + postfix   
    ExtractDict[Newstring]= start
    start += 1
startagain =0
OutputNameDict = {}
for OutputNameList in sorted(ExtractDict.iterkeys()):
    OutputNameDict[OutputNameList] = startagain
    startagain +=1

#OutputNameDict = {'h18_84pp_3A_MVP_FIX': 1, 'p18_84pp_2B_MVP_FIX': 2, 'g18_84pp_2A_MVP_MIX': 0}
于 2013-07-18T15:44:29.343 に答える