簡體   English   中英

使用shutil.move 移動文件太慢

[英]Moving files using shutil.move is too slow

我正在嘗試使用shutil.move將文件從一個文件夾移動到同一 HD 中的另一個文件夾。 然而,這個過程需要很長時間才能完成。 通常在這些操作中有太多的文件(將近 2,000 個),並且這些文件總共超過 1TB。

我查看了shutil.move文檔,並解釋說shutil.move在其背后使用了一個復制函數(我想這就是該過程如此緩慢的原因):

關閉。移動(src,dst,copy_function=copy2)

遞歸地將文件或目錄 (src) 移動到另一個位置 (dst) 並返回目標。

如果目標是現有目錄,則將 src 移動到該目錄中。 如果目標已經存在但不是目錄,它可能會根據 os.rename() 語義被覆蓋。

如果目標在當前文件系統上,則使用 os.rename()。 否則,使用 copy_function 將 src 復制到 dst,然后刪除。 在符號鏈接的情況下,一個指向 src 目標的新符號鏈接將在 dst 中創建或作為 dst 並且 src 將被刪除。

如果給定了 copy_function,它必須是一個帶有兩個參數 src 和 dst 的可調用對象,如果不能使用 os.rename(),它將用於將 src 復制到 dst。 如果源是一個目錄,則調用 copytree(),將 copy_function() 傳遞給它。 默認的 copy_function 是 copy2()。 使用 copy() 作為 copy_function 允許在不可能復制元數據時移動成功,代價是不復制任何元數據。

我已經嘗試在shutil.move文檔中提供的復制功能之間進行更改,但這並沒有改善移動文件的時間。

當我嘗試使用ctrl + X自己移動文件時,文件會立即移動。 有人知道我可以使用shutil.move的替代方法,它具有與ctrl + X命令相同的性能嗎?

提前致謝。

編輯

我將所有要移動的文件放在一個文件夾中,然后執行shutil.move ,所以我的代碼只是:

src_folder = 'C:/Users/sim/Documents/files_to_move'
dst_folder = 'C:/Users/sim/Documents/_out/'

shutil.move(src_folder, dst_folder)

我也在 Windows 10 上工作。

我不知道為什么我在使用shutil.move時會遇到這個問題。

我正在使用相同的文件系統(也在同一個硬盤驅動器中),當我執行shutil.move(src, dst)該過程需要數小時才能完成,而當我手動執行時(使用ctrl-X快捷方式)相同的文件立即被移動。

我設法使用os.rename解決了這個問題,現在它完美地工作(文件正在快速移動,就像使用ctrl-X快捷方式一樣)。 如果其他人遇到同樣的問題,我會在這里留下這個答案,也許這可以在某種程度上有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM