python / psychopy:用于循环分割图像名称

时间:2016-10-03 15:31:56

标签: python psychopy

我有一个图像列表,我想将它们的名字分成'='符号。

e.g。从:

'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循环不会从列表中拆分每个图像的名称。

谢谢, 史蒂夫

1 个答案:

答案 0 :(得分:1)

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

这不起作用....你想要这个:

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

print(new_list)

因为您没有在for循环中更改list。您只是在更改项目,但如果有意义的话,您不会在列表中对其进行编辑。

另一种解决方法如下:

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通话,那么你唯一能做到的就是你的问题。