2012-04-10 69 views
3

我做了一個小應用程序,基本上在某些時候我調用distutils.dir_util.copy_tree將文件複製到目的地。有沒有人幫我一個基本的進度條鏈接,如:Python,如何將進度條鏈接到distutils.dir_util.copy_tree

[======]50% 

在複製過程...不幸的是,我不能猜我渴望它會採取複製文件夾樹,因爲它的會是不時有所不同。 在此先感謝任何會回答我的人。

回答

3

distutils.dir_util.copy_tree()不提供可用於此的回調。您需要使用os.walk()來枚舉文件系統對象,然後使用shutil.copy[2]()複製實際對象。

+0

感謝Ignacio,我想我可以在distutils.dir_util.copy_tree()'foor loop'裏面加入一個簡單的進度條......這不可能嗎? – nassio 2012-04-10 18:53:42

+1

請勿用stdlib代碼擰緊。 – 2012-04-10 18:54:33

+0

@nassio,無論如何都需要將它分成兩個通行證 - 在開始複製之前,您需要知道文件的總數。 – 2012-04-10 19:11:02

0

如Python的文檔說明,你可以提供一個回調shutil .copytree。

from shutil import copytree 

def _countFiles(path, names): 
    #do someting with "path" and "names" 
    return [] # nothing will be ignored 

copytree(source, destination, ignore=_countFiles) 

我不寫代碼來獲得進步,但你明白了吧:

  1. 計數文件目錄(和子目錄)在「_countFiles」
  2. ,增加數量處理的文件的
  3. 進度= nb_processed_files * 100/nb_total_files

問候

+0

這是不正確的。 Python文檔明確指出,忽略可調用被複制的每個(子)目錄調用一次,將目錄和文件列表傳遞給可調用對象。這不提供進度機制,因爲它每個目錄調用一次,而不是每個文件。假設你在一個目錄中有10,000個文件。該忽略會被調用一次,以查看哪些文件要忽略,並且再也不會,從而不能跟蹤進度。 – user1610729 2014-12-09 22:44:15

+0

這是一個很好的觀點。至少你有進步的目錄:) – Samoht 2015-03-20 14:35:49