2014-03-31 71 views
0

我正在嘗試爲一個批處理腳本創建一個輸出文件夾/文件,我正在文件夾中的每個文件上運行。我想如果當我發現targetFolder中的所有文件或文件夾時,我可以創建一個targetFolder_output,並且如果targetFolder有一個文件夾anotherFolder,那麼我可以在targetFolder_out中創建anotherFolder_output。創建一個文件夾及其中的文件夾的副本,同時更改其名稱

所以在最後我有C:\ targetFolder \ anotherFolder,它是重複的C:\ targetFolder_output \ anotherFolder_output

我計劃與所有在那裏的文件要做到這一點,但我想如果我能得到過這個文件夾的障礙,我可以處理文件之一。

import os 

targetFolder = "C:\\Users\\MyUserName\\Desktop\\tests" 
outputFolder = targetFolder + "_output" 

# Iterate over everything in the targetFolder 
for directory, subdirectories, files in os.walk(targetFolder): 
    folderBasename = (os.path.basename(directory)) 

    if not os.path.exists(outputFolder + "\\" + folderBasename + "_output"): 
     os.makedirs(outputFolder + "\\" + folderBasename + "_output") 

到目前爲止,這一切正在做的是讓我的桌面 「tests_output」 與文件夾中的文件夾:
tests_output \ tests_output
tests_output \ level2_output
tests_output \ level3_output

我想看到的是:
tests_output \ level2_output \ level3_output

任何幫助將非常感謝!

+3

它是最好使用'os.path.join()'而不是手工粘貼路徑。 –

+0

很高興知道,並可能在晚些時候爲我節省很多頭痛。 –

回答

0
import os 
class FCopy(object): 
    def __init__(self, source): 
     self.source = source 
     self.target = os.path.join(source, '_output') 
     if not os.path.exists(self.target): 
      os.makedirs(os.path.abspath(self.target)) 
     self.lf, self.ld = [], [] 

    def walk(self, path): 
     for x in (os.path.join(path, x) for x in os.listdir(path)): 
      if x == self.target:continue 
      if os.path.isfile(x): 
       self.lf.append(x) 
      elif os.path.isdir(x): 
       self.ld.append(x) 
       self.walk(x) 
      #extra code if you want to handle symlinks 

    def do(self): 
     #if thats all you want, 
     #code this directly in walk 
     self.walk(self.source) 

     for x in self.ld: 
      x = x.replace(self.source, self.target) 
      os.makedirs(x) 
     for x in self.lf: 
      x = x.replace(self.source, self.target) 
      with open(x, 'w') as f:pass 

f = FCopy('C:\\PerfLogs\\w\\tmp\\codemirror') 
f.do() 

你可以玩ifexists等等。 如果你想要的是源的結構的兩倍,那麼你可以移動創建的文件/ dirs在步行,在相應的if ... else PS:忽略我的目錄,我只是在其中進行測試

+0

這一刻我離開了我的電腦,但只要我有機會,我一定會檢查一下,看看它是否需要我的電腦!我現在在我的手機中,所以我只能看到這麼多,但它看起來很有前途!謝謝! –

+0

如果你不想創建文件 - 我認爲你沒有 - 在self.lf中的x和from do() – cox

+0

之後的2個註釋/刪除對不起,但是我最終需要測試代碼。所以當我設置'FCopy'('C:\\ Users \\ Hobo \\ Desktop \\ tests')'時,你正在做的是在tests文件夾中創建一個文件夾「_output」,其中包含一個level2文件夾,在裏面有一個level3文件夾。我想要做的是在桌面上創建一個文件夾「tests_output」,並在每個文件夾中添加「_output」。你給我的東西仍然非常有幫助!我想我可以從這裏開始工作,如果沒有其他的東西! –

相關問題