【发布时间】:2014-03-31 11:29:35
【问题描述】:
与使用 Windows 文件资源管理器或 Mac 的 Finder 进行常规右键单击复制 > 右键单击粘贴相比,使用 shutil.copyfile() 复制文件所需的时间至少长 3 倍。
在 Python 中有没有比shutil.copyfile() 更快的替代方法?可以做些什么来加快文件复制过程? (文件目标在网络驱动器上……如果有什么不同的话……)。
稍后编辑:
这是我最终得到的结果:
def copyWithSubprocess(cmd):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
win=mac=False
if sys.platform.startswith("darwin"):mac=True
elif sys.platform.startswith("win"):win=True
cmd=None
if mac: cmd=['cp', source, dest]
elif win: cmd=['xcopy', source, dest, '/K/O/X']
if cmd: copyWithSubprocess(cmd)
【问题讨论】:
-
您可以使用本机命令行选项,例如用于 Linux 和 Mac 的
cp和用于 Windows 的COPY。它们应该和使用 GUI 时一样快。 -
在 Windows 上 SHFileOperation 为您提供本机 shell 文件副本
-
根据问题中未说明的某些因素,在传输之前将文件打包到压缩存档中可能会有所帮助...您是否考虑过使用类似 rsync 的东西?
-
如果您担心所有权和 ACL,请不要仅出于这个原因使用 shutil:'On Windows, file owners, ACLs and alternate data streams are not copied.'
-
值得注意的是,在 Python 3.8 中,复制文件和目录的函数have been optimized 可以在几个主要操作系统上运行得更快。
标签: python shutil file-copying