2016-10-03 190 views
0

我有一個圖像列表,我想在'='符號處分割它們的名字。python/psychopy:for循環來分割圖像名稱

例如來自:

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

'aa.png' 

我試圖創建一個「for循環」通過列表中的每一項運行,進而分裂的名字。儘管在控制檯中沒有錯誤,名稱似乎不會被拆分。

這裏是我的代碼和循環:

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循環不會從列表中分割每個圖像的名稱。

謝謝你,史蒂夫

+0

什麼是你的for循環中的'list'?結構項目是否具有「name」屬性? – MooingRawr

+0

對不起,這是圖片列表,我剛剛編輯了我原來的帖子。是的,每個圖像都具有「名稱」屬性。 – Steve

回答

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

這不工作....你想這個:

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

print(new_list) 

既然你不改變在你的list for循環。你只是在改變這個項目,但是你並沒有在列表中編輯它,如果這是有道理的。

解決這個另一種方式是:

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

編輯:

看你怎麼想了保持引用的A1,A2,...,A8無論出於何種原因......這裏的爲什麼你不能用我們現在擁有的東西去做。字符串是不可改變的對象,一旦你改變了它,你正在創建一個新的對象,當然你可以將它重新分配給你的變量,但這不是重點。如果你想保持引用,那麼你應該使用一個字典,其中的鍵是你的變量名稱,值是很好的值。

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