推荐学习书目
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 · Sep 1, 2018 · 3883 views
    This topic created in 2839 days ago, the information mentioned may be changed or developed.

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

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

    调用 cp 不如直接呼叫 rsync 来干这事,更可靠。mv 真的风险太大。
    zaaazaa
        10
    zaaazaa  
    OP
       Sep 1, 2018
    @likuku 😢cp 和 rsync 是什么东东
    swulling
        11
    swulling  
       Sep 1, 2018 via Android
    @likuku 并不会
    nyanyh
        12
    nyanyh  
       Sep 1, 2018
    @zaaazaa rsync 是一个文件同步工具,支持断点续传
    deyu260
        13
    deyu260  
       Sep 2, 2018
    @nyanyh rsync 也能 move 文件吗?
    nyanyh
        14
    nyanyh  
       Sep 2, 2018
    @deyu260 #13 rsync --remove-source-files
    nyanyh
        15
    nyanyh  
       Sep 2, 2018
    @deyu260 #13 但是 rsync 还是复制文件然后删除,和同一文件系统下 mv 只修改文件记录相比肯定是慢太多
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5260 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 01:13 · PVG 09:13 · LAX 18:13 · JFK 21:13
    ♥ Do have faith in what you're doing.