2014-10-08 111 views
0

我有一堆文件,我钻进蟒蛇有:从列表中重命名文件名的文件在python

def list_files(path): 
    # returns a list of names (with extension, without full path) of all files 
    # in folder path 
    files = [] 
    for name in os.listdir(path): 
     if os.path.isfile(os.path.join(path, name)): 
      files.append(name) 
    return files 

images = list_files('.') 

>>> images 
['file1.jpg', 'file2.jpg', 'file3.jpg'] 

我也有类似的列表:

>>> b 
['ren', 'sans', 'ren'] 

我wan't重命名图像和附加在b对应的字符串,因此要获得:

文件1,ren.jpg
文件2,sans.jpg
文件3,ren.j pg

for imgs in images : 
    os.rename(imgs,''.join(imgs + b for f in b)) 

TypeError: cannot concatenate 'str' and 'numpy.ndarray' objects 

我觉得这样好吗? 感谢

+4

如何仁/ SANS /人转成仁/人/人? – 2014-10-08 19:36:15

+1

你想在'join'中使用'imgs + f'而不是'imgs + b'吗? – mgilson 2014-10-08 19:36:17

+0

另请注意,'os.listdir'没有为它返回的名称指定任何特定顺序。 。 。 – mgilson 2014-10-08 19:37:15

回答

4

的想法会更喜欢:

for img, extra in zip(images, b) : 
    os.rename(img, ''.join([img, '-', extra, '.jpg']) 

然而,就意味着你已经移除了IMG的扩展。

如果没有,那么:

for img, extra in zip(images, b) : 
    filename, extension = os.path.splitext(img) 
    os.rename(img, ''.join([filename, '-', extra, extension]) 
+1

它适合我。谢谢 ! – Chargaff 2014-10-08 19:57:55

+0

欢迎,很高兴帮助。 – 2014-10-08 19:59:39

+0

但是,在这种情况下,这是有效的,因为len(b)== len(图像),否则它当然不会。 – 2014-10-08 20:08:12