关于用 shutil 模块 复制大文件

2018-09-01 14:12:50 +08:00
 zaaazaa

因为电脑里不可描述的视频太多,准备清理下。用 py 写脚本,想快速分类并移动文件到指定文件夹,但是在用 shutil 模块复制视频文件的时候,耗时极长,一个 1g 大小的视频大概需要花费 1 分钟左右,而且期间电脑风扇狂转,本人用的 mbp13 寸,想问问大家这是什么情况,有没有更好的解决办法呢?

2992 次点击
所在节点    Python
15 条回复
swulling
2018-09-01 14:16:05 +08:00
用 mv 不要用 cp
zaaazaa
2018-09-01 14:17:42 +08:00
@swulling 我试试勒
ipwx
2018-09-01 14:21:00 +08:00
os.rename 不能跨卷
zaaazaa
2018-09-01 14:30:25 +08:00
@swulling 还真是,谢谢🙏
zaaazaa
2018-09-01 14:31:01 +08:00
@swulling 但是为啥 copy 那么慢呢
ysc3839
2018-09-01 14:36:16 +08:00
@zaaazaa move 比 copy 快是因为 move 在同文件系统下只是修改一下记录,没有复制操作。
操作系统的复制比 Python 快的话可能是因为系统有特别优化。而 Python 的 shutil 仅仅是同步读取然后同步写入。

```
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
```
zaaazaa
2018-09-01 14:56:14 +08:00
@ysc3839 原来这样……那是挺慢的
likuku
2018-09-01 15:12:14 +08:00
@swulling mv 万一中途意外中断可就大麻烦。
likuku
2018-09-01 15:13:53 +08:00
13 寸 mbp,是机械硬盘么?

调用 cp 不如直接呼叫 rsync 来干这事,更可靠。mv 真的风险太大。
zaaazaa
2018-09-01 15:51:34 +08:00
@likuku 😢cp 和 rsync 是什么东东
swulling
2018-09-01 16:55:43 +08:00
@likuku 并不会
nyanyh
2018-09-01 16:59:13 +08:00
@zaaazaa rsync 是一个文件同步工具,支持断点续传
deyu260
2018-09-02 07:39:02 +08:00
@nyanyh rsync 也能 move 文件吗?
nyanyh
2018-09-02 22:40:02 +08:00
@deyu260 #13 rsync --remove-source-files
nyanyh
2018-09-02 22:40:53 +08:00
@deyu260 #13 但是 rsync 还是复制文件然后删除,和同一文件系统下 mv 只修改文件记录相比肯定是慢太多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485173

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX