[英]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.