V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zaaazaa
V2EX  ›  Python

关于用 shutil 模块 复制大文件

  •  
  •   zaaazaa · 2018-09-01 14:12:50 +08:00 · 3164 次点击
    这是一个创建于 2283 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2018-09-02 22:40:53 +08:00
    swulling
        1
    swulling  
       2018-09-01 14:16:05 +08:00 via iPhone
    用 mv 不要用 cp
    zaaazaa
        2
    zaaazaa  
    OP
       2018-09-01 14:17:42 +08:00
    @swulling 我试试勒
    ipwx
        3
    ipwx  
       2018-09-01 14:21:00 +08:00 via iPhone
    os.rename 不能跨卷
    zaaazaa
        4
    zaaazaa  
    OP
       2018-09-01 14:30:25 +08:00
    @swulling 还真是,谢谢🙏
    zaaazaa
        5
    zaaazaa  
    OP
       2018-09-01 14:31:01 +08:00
    @swulling 但是为啥 copy 那么慢呢
    ysc3839
        6
    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
        7
    zaaazaa  
    OP
       2018-09-01 14:56:14 +08:00
    @ysc3839 原来这样……那是挺慢的
    likuku
        8
    likuku  
       2018-09-01 15:12:14 +08:00
    @swulling mv 万一中途意外中断可就大麻烦。
    likuku
        9
    likuku  
       2018-09-01 15:13:53 +08:00
    13 寸 mbp,是机械硬盘么?

    调用 cp 不如直接呼叫 rsync 来干这事,更可靠。mv 真的风险太大。
    zaaazaa
        10
    zaaazaa  
    OP
       2018-09-01 15:51:34 +08:00
    @likuku 😢cp 和 rsync 是什么东东
    swulling
        11
    swulling  
       2018-09-01 16:55:43 +08:00 via Android
    @likuku 并不会
    nyanyh
        12
    nyanyh  
       2018-09-01 16:59:13 +08:00
    @zaaazaa rsync 是一个文件同步工具,支持断点续传
    deyu260
        13
    deyu260  
       2018-09-02 07:39:02 +08:00
    @nyanyh rsync 也能 move 文件吗?
    nyanyh
        14
    nyanyh  
       2018-09-02 22:40:02 +08:00
    @deyu260 #13 rsync --remove-source-files
    nyanyh
        15
    nyanyh  
       2018-09-02 22:40:53 +08:00
    @deyu260 #13 但是 rsync 还是复制文件然后删除,和同一文件系统下 mv 只修改文件记录相比肯定是慢太多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2640 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:05 · PVG 18:05 · LAX 02:05 · JFK 05:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.