2016-10-03 3 views
0

私は画像のリストを持っており、その名前を '='記号で分割したいと思います。python/psychopy:forループで画像名を分割する

From:

'set_one-C:\Users\Documents\stim\01=aa.png' 

'aa.png' 

に私は、リスト内の各アイテムを実行して、順番に名前を分割する「のループ」を作成しようとしました。コンソールにエラーはありませんが、名前は分割されていません。ここで

は私のコードとループです:

imgList1 = glob.glob(os.path.join('C:\Users\Documents\stim','*.png')) 

set_one = [visual.ImageStim(win, img, name='set_one-' + img) for img in imgList1[:8]] 
set_two = [visual.ImageStim(win, img, name='set_two-' + img) for img in imgList1[8:16]] 

sets = [set_one, set_two] 

a1 = sets[0][0] 
a2 = sets[0][1] 
a3 = sets[0][2] 
a4 = sets[0][3] 
a5 = sets[0][4] 
a6 = sets[0][5] 
a7 = sets[0][6] 
a8 = sets[0][7] 

list = [a1,a2,a3,a4,a5,a6,a7,a8] 

print a1 

for item in list: 

    item = item.name.split('=')[1] 

print a1 

>>ImageStim(autoLog=True, color=array([ 1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=0, flipHoriz=False, flipVert=False, image=str(...), interpolate=False, mask=None, maskParams=None, name=str(...), opacity=1.0, ori=0.0, pos=array([ 0., 0.]), size=array([ 18.36534845, 11.47834278]), texRes=128, units='deg', win=Window(...)) 
>>ImageStim(autoLog=True, color=array([ 1., 1., 1.]), colorSpace='rgb', contrast=1.0, depth=0, flipHoriz=False, flipVert=False, image=str(...), interpolate=False, mask=None, maskParams=None, name=str(...), opacity=1.0, ori=0.0, pos=array([ 0., 0.]), size=array([ 18.36534845, 11.47834278]), texRes=128, units='deg', win=Window(...)) 

私は単純に、このように個別にそれらを分割することができ知っている:

a1 = a1.name.split('=')[1] 
a2 = a2.name.split('=')[1] etc.. 

print a1 

>>aa.png 

をしかし、私はによりその分裂の量にこれを自動化する必要がありますか私はする必要があります。 forループがリストから各イメージの名前を分割しない理由はわかりません。あなたがのためのループであなたのlistを変更していないので

new_list = [] 
for item in list: 
    new_list.append(item.name.split('=')[1]) 

print(new_list) 

おかげで、 スティーブ

+0

forループの 'list'とは何ですか?そして、構造アイテムは属性 'name'を持っていますか? – MooingRawr

+0

申し訳ありません、画像の一覧です。元の投稿を編集しました。そして、はい、各画像は属性 'name'を持っています。 – Steve

答えて

1
item = item.name.split('=')[1] 

これは動作しません....あなたは代わりにこれをしたいです。あなたはアイテムを変更しているだけですが、それが意味をなさない場合はリスト内で編集していません。

これを回避するもう一つの方法は、以下の通りです:

for i, item in enumerate(list): 
    list[i] = item.name.split('=')[1] 

編集:

は、あなたが何らかの理由でA8、...、A2、A1への参照を維持する方法を見て...ここですなぜ私たちが今持っているものでそれをすることができないのですか?文字列は不変のオブジェクトですが、一度変更すると新しいオブジェクトを作成しますが、変数に再割り当てすることはできますが、それは重要ではありません。参照を保持したい場合は、キーが変数名で、その値が十分に価値のあるディクショナリを使用する必要があります。

list_of_var = ['a1','a2','a3'] # and so on 
list = [a1,a2,a3,a4,a5,a6,a7,a8] 
new_dict = {key: value.name.split("=")[1] for value, key in zip(list,list_of_var)} 
#call it like new_dict["a1"] 

しかし、一日の終わりに、あなたが出て辞書とA1呼び出しで死んで設定されている場合、あなたはそれを行うことができる唯一の方法は、あなたがあなたの質問の最後に持っているものです。

+0

ああ、私は理解しています。ご協力いただきありがとうございます! – Steve

+0

実際、元のリストと同じように、それぞれのイメージを 'a1、a2'などと呼ぶことができる必要もあります。あなたはこれを保持する方法を知っていますか? – Steve

+0

http://stackoverflow.com/a/9967237/4099813この回答を参照して、私にあなたにa1、a2への参照を依然として保持するようにしたいかどうかを確認してください。ほとんどの場合、あなたの周りに別の方法があります(XY問題)に焦点を当てるのではなく、問題です。 – MooingRawr

関連する問題