2017-04-24 68 views
0

我很新的python和stackoverflow,但到目前爲止,我愛它的方式,我可以用它在工作中的小日常任務!重命名文件基於父文件夾...但具有不同的變化

我剛剛接觸了一個項目,我們必須將一組文件與公司的標準進行匹配 - 基本上重命名文件以匹配公司的命名命名。

當前文件夾結構如下:

  • 施工圖文件夾
    • M001 - 人們廳
      • 人民霍爾1_Final.vsd
      • 人民Hall_Final,2.vsd
      • People Hall-3_Final.vsd

我需要改變他們什麼是:

  • 施工圖文件夾
    • M001 - 人們廳
      • M001_People_Hall_Final-1.vsd
      • M001_People_Hall_Final-2。 VSD
      • M001_People_Hall_Final-3.vsd

正如你可以看到,我們有可能有 「-1_Final.vsd」 當前文件和其他一些人可能有「_Final-2.vsd 」。有大約400個「M001 - 人民大會堂」文件夾有不同的「M」號碼和名字。有些文件夾可能只有1個文件,有些文件夾可能有10個文件!

我已經嘗試了很多方法來做到這一點(並閱讀本網站上的類似問題),但我只是大約一個月學習Python,所以這將是我必須做的最複雜的事情到目前爲止 - 所以我認爲這裏涉及的大部分東西都超出了我的頭腦!我讀過一本關於python的書,它給了我一個關於導入os和追加的基本概述,但是我真的可以使用一些幫助獲取這個python腳本,以便我可以從中學習。

如果有人有任何建議,我會非常感激!

感謝這麼多,戴夫

+1

你嘗試過這麼遠嗎? –

回答

0

我想嘗試他們的分裂成詞,然後篩選出數字「正常化」的文件名,他們參加了。

import os 
import re 


def cut_and_sort(name): 
    # "foo_bar-3-baz" -> ["foo", "bar", "baz", "3"] 
    parts = re.split(r'[\s\._-]', name) 
    result = [] 
    result.extend(p for p in parts if not p.isdigit()) # words first. 
    result.extend(p for p in parts if p.isdigit()) # numbers last. 
    return result 


def normalize_name(name): 
    # cut out the.vsd part. 
    name, ext = os.path.splitext(name) 
    # recombine the name from parts. 
    return '_'.join(cut_and_sort(name)) + ext 

現在,您可以:

>>> normalize_name('People Hall_2-Final.vsd') 
'People_Hall_Final_2.vsd' 

我希望這是你一個很好的起點。

+0

Hi @DavidBlack!我希望你能弄清楚其餘的。 – 9000

+0

'進口OS 目錄= R'C:\用戶\大衛\ OneDrive \文件\的Python \的自學程序員\ 20150178一束 parent_directory = os.path.dirname(目錄) vsdfiles = [os.path中。加入(根,名) 根目錄,文件在os.walk文件(目錄) 的名稱文件 \t如果name.endswith(() 「VSD」) 的文件中vsdfiles: 如果有的話(對於vsdfiles文件,文件中爲「-1」): os.replace(「 - 1」,「」) os.rename(文件,路徑+文件) 如果存在vsdfiles ): os。替換(「」,「_」)' –

+0

對不起,我不知道如何格式化我的進度,就像你有...但這就是我迄今爲止。我在我面前寫了一個流程圖,以說明爲了獲得產品而需要採取的步驟,但我似乎無法獲得適合我的非常基本的東西!任何批評(我敢肯定是一切!)非常感謝! @Greg –

0

如果9000的答案是不行的,我會嘗試大意如下的內容:

import os 
directory = <<INSERT DIRECTORY PATH HERE>> 

parent_directory = os.path.dirname(directory) 

for filename in os.listdir(directory): 
    os.rename(filename, parent_directory + '_' + filename) 
+0

嗨格雷格,非常感謝您的回覆!請參閱我對9000的回覆以查看我的進度。希望我能有機會發布我今晚迄今爲止所擁有的東西! 再次感謝, Dave –