首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用shutil.move移动文件太慢了

使用shutil.move移动文件太慢了
EN

Stack Overflow用户
提问于 2021-10-03 18:57:13
回答 1查看 984关注 0票数 1

我试图使用shutil.move将文件从一个文件夹移动到同一个HD中的另一个文件夹。然而,这一过程需要很长时间才能完成。通常,在这些操作中,有太多的文件(几乎2,000个),这些文件加在一起总共有超过1TB。

我查看了shutil.move文档,并解释了shutil.move在其背后使用了一个复制函数(我猜这就是为什么这个过程如此缓慢):

shutil.move(src,dst,拷贝) 递归地将文件或目录(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,所以我的代码是:

代码语言:javascript
运行
复制
src_folder = 'C:/Users/sim/Documents/files_to_move'
dst_folder = 'C:/Users/sim/Documents/_out/'

shutil.move(src_folder, dst_folder)

此外,我还在Windows 10上工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 18:46:25

我不知道为什么在使用shutil.move时会出现这个问题。

我使用相同的文件系统(也在同一个硬盘中),在执行shutil.move(src, dst)时,这个过程需要几个小时才能完成,当我手动(使用ctrl-X快捷方式)完成该过程时,相同的文件会立即被移动。

我设法用os.rename来解决这个问题,现在它工作得很好(文件正以使用ctrl-X快捷方式快速移动)。如果其他人面临同样的问题,我将把这个答案留在这里,也许这会在某种程度上有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69427982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档