2014-10-08 112 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