2016-10-03 193 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