我正在尝试使用shutil.move. 然而,这个过程需要很长时间才能完成。这些操作中通常会出现文件过多(接近 2,000 个)的情况,这些文件的总大小超过 1TB。
我查看了shutil.move文档,并解释说它shutil.move背后使用了复制功能(我想这就是过程如此缓慢的原因):
Shutil.move(src, dst, copy_function=copy2)
递归地将文件或目录 (src) 移动到另一个位置 (dst) 并返回目标。
如果目标是现有目录,则 src 会移动到该目录内。如果目标已经存在但不是目录,则它可能会被覆盖,具体取决于 os.rename() 语义。
如果目标位于当前文件系统上,则使用 os.rename()。否则,使用 copy_function 将 src 复制到 dst,然后删除。对于符号链接,将在 dst 中或作为 dst 创建一个指向 src 目标的新符号链接,并且 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)
Run Code Online (Sandbox Code Playgroud)
我也在 Windows 10 上工作。
我不确定为什么我在使用时遇到这个问题shutil.move。
我正在使用相同的文件系统(也在同一个硬盘驱动器中),当我执行shutil.move(src, dst)该过程需要几个小时才能完成,当我手动执行此操作(使用ctrl-X快捷方式)时,相同的文件会立即移动。
我设法使用替代方法解决了问题os.rename,现在它工作得很好(文件移动速度与使用ctrl-X快捷方式一样快)。如果其他人面临同样的问题,我会将这个答案留在这里,也许这会在某种程度上有所帮助。
| 归档时间: |
|
| 查看次数: |
2076 次 |
| 最近记录: |