2014-04-20 75 views
1

我正在尋找的是一個腳本,可以通過一個巨大的圖片列表並將它們分類到文件夾中。我需要編寫一個Python腳本來排序圖片,我該怎麼做?

因此,我在展會上爲狗拍照,因此可以說我拍了幾張dog1照片,這張狗照片是以序列號格式(Dog1-1,Dog1-2,Dog1-3等)自動命名的。 Dog2將遵循相同的格式。

我想一個腳本,可以採取Dog1-1-10並將其移動到一個名爲狗1 Dog2-1-10到一個名爲狗2文件夾文件夾等

這怎麼可能在Python中完成?

+2

什麼都__you__試過嗎? – sshashank124

+0

我試過按照本指南 [自動化常見任務](http://www.pythonlearn.com/html-007/cfbook016.html) 我根本沒有Python經驗,所以任何指南或鏈接導遊將是非常有益的。 – user3553113

回答

4

所以基本上,你想要做的是:

  1. 找到每一個文件給定文件夾
  2. 以每個文件名的第一部分,並使用該文件夾名稱
  3. 如果文件夾不存在,創建它
  4. 將文件移動到該文件夾​​
  5. 重複

呃,漂亮!弄清楚我們想要做的是戰鬥的一半 - 現在,這主要是一個谷歌搜索並將其轉化爲代碼的問題。

首先,我們需要的文件夾辦理入住手續:

folder_path = "myfolder" 

現在,我們要找出該文件夾內的所有文件。快速谷歌搜索會輪番上漲this

import os 
import os.path 

images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] 

順便說一句,我將使用os.path.join公平一點,所以你可能要對他們做的簡單讀了。你在評論中鏈接到的指南涵蓋了它相當好。

現在,我們需要每個名稱的第一部分。我會假設我們會將第一個短劃線的所有內容作爲文件夾名稱處理,而忽略其餘部分。要做到這一點的方法之一是使用string.split,其將通過給定的字符字符串轉換成字符串列表,並抓住第一個元素:

for image in images: 
    folder_name = image.split('-')[0] 

現在,如果該文件夾不存在,我們希望創造它。再次,google is our friend

new_path = os.path.join(folder_path, folder_name) 
if not os.path.exists(new_path): 
    os.makedirs(new_path) 

最後,我們move the original image

import shutil 

old_image_path = os.path.join(folder_path, image) 
new_image_path = os.path.join(new_path, image) 
shutil.move(old_image_path, new_image_path) 

全部放在一起:

import os 
import os.path 
import shutil 

folder_path = "test" 

images = [f for f in os.listdir(folder_path) if os.path.isfile(os.path.join(folder_path, f))] 

for image in images: 
    folder_name = image.split('-')[0] 

    new_path = os.path.join(folder_path, folder_name) 
    if not os.path.exists(new_path): 
     os.makedirs(new_path) 

    old_image_path = os.path.join(folder_path, image) 
    new_image_path = os.path.join(new_path, image) 
    shutil.move(old_image_path, new_image_path) 
相關問題