2017-01-02 43 views
-1

比方说,我上传上传文件的整个文件夹时,如何将它们分配给所有相关的变量名?

Desktop/folder/dog.jpg, Desktop/folder/fish.jpg, Desktop/folder/lizard.jpg 

我能理论上这样做

a = ['Desktop/folder/dog.jpg', 'Desktop/folder/fish.jpg', 'Desktop/folder/lizard.jpg'] 

for x in a 
    b = read(x) 
    regex(x)= b 

,这样无需手动做的每一个,它结束了像

dog=read(dog.jpg) 
fish=read(fish.jpg) 
lizard=read(lizard.jpg) 

+0

我不明白你想做什么,特别是当你的伪代码给函数调用分配了某些东西时。 – TigerhawkT3

+0

你可以参考答案http://stackoverflow.com/questions/19122345/to-convert-string-to-variable-name这是类似于你想要的 –

回答

1

下面是从文件名提取名的函数:

def getname(astr): 
    import os.path 
    name = os.path.basename(astr) 
    name = os.path.splitext(name)[0] 
    return name 

从你的文件名列表,我可以得到的“变量”名称的列表:

In [150]: filenames = ['Desktop/folder/dog.jpg', 'Desktop/folder/fish.jpg', 'Desktop/folder/lizard.jpg'] 
In [155]: [getname(i) for i in filenames] 
Out[155]: ['dog', 'fish', 'lizard'] 

但是,而不是尝试把它们放在全球名字空间中,我建议将它们收集在一本字典中:

In [156]: adict = {getname(i): i for i in filenames} 
In [157]: adict 
Out[157]: 
{'dog': 'Desktop/folder/dog.jpg', 
'fish': 'Desktop/folder/fish.jpg', 
'lizard': 'Desktop/folder/lizard.jpg'} 

或者如果用read功能:

adict = {getname(i): read(i) for i in filenames} 

通常在Python它是更加有用的,以收集对象,如这些图像中,在列表或字典,而不是试图分配每一个以独立的变量。

写出adict['fish']就像是fish一样容易。有了字典,你可以很容易地“回路”全在设置

for k,v in adict.items(): 
    print('name:',k) 
    display(v) 

注释链接的有关分配给变量,为什么普遍认为是一个贫穷的想法做题一整串。