繁体   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