zoukankan      html  css  js  c++  java
  • 【转】Windows下用Python你会几种copy文件的方法?

    :500px;100%;">

    ref http://topic.csdn.net/u/20090912/10/c13937be-0f4a-4aca-9cbb-cb6b41128f11.html
    http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html

    1. os.system

    import os
    import tempfile

    filename1
    = tempfile.mktemp (".txt")
    open (filename1,
    "w").close ()
    filename2
    = filename1 + ".copy"
    print filename1, "=>", filename2

    #拷文件
    os.system ("copy %s %s" % (filename1, filename2))

    if os.path.isfile (filename2): print "Success"

    dirname1
    = tempfile.mktemp (".dir")
    os.mkdir (dirname1)
    dirname2
    = dirname1 + ".copy"
    print dirname1, "=>", dirname2

    #拷目录
    os.system ("xcopy /s %s %s" % (dirname1, dirname2))

    if os.path.isdir (dirname2): print "Success"

    2. shutil.copy和shutil.copytree

    import os
    import shutil
    import tempfile

    filename1
    = tempfile.mktemp (".txt")
    open (filename1,
    "w").close ()
    filename2
    = filename1 + ".copy"
    print filename1, "=>", filename2

    #拷文件
    shutil.copy (filename1, filename2)

    if os.path.isfile (filename2): print "Success"

    dirname1
    = tempfile.mktemp (".dir")
    os.mkdir (dirname1)
    dirname2
    = dirname1 + ".copy"
    print dirname1, "=>", dirname2

    #拷目录
    shutil.copytree (dirname1, dirname2)

    if os.path.isdir (dirname2): print "Success"

    3.  win32file.CopyFile

    import os
    import win32file
    import tempfile

    filename1
    = tempfile.mktemp (".txt")
    open (filename1,
    "w").close ()
    filename2
    = filename1 + ".copy"
    print filename1, "=>", filename2

    #拷文件
    #
    文件已存在时,1为不覆盖,0为覆盖
    win32file.CopyFile (filename1, filename2, 1)
    win32file.CopyFile (filename1, filename2, 0)
    win32file.CopyFile (filename1, filename2,
    1)

    if os.path.isfile (filename2): print "Success"

    dirname1
    = tempfile.mktemp (".dir")
    os.mkdir (dirname1)
    dirname2
    = dirname1 + ".copy"
    print dirname1, "=>", dirname2

    #拷目录
    win32file.CopyFile (dirname1, dirname2, 1)

    if os.path.isdir (dirname2): print "Success"

    4. SHFileOperation

    import os
    from win32com.shell import shell, shellcon
    import tempfile

    filename1
    = tempfile.mktemp (".txt")
    open (filename1,
    "w").close ()
    filename2
    = filename1 + ".copy"
    print filename1, "=>", filename2

    #拷文件
    #
    文件已存在时,shellcon.FOF_RENAMEONCOLLISION会指示重命名文件
    shell.SHFileOperation (
    (0, shellcon.FO_COPY, filename1, filename2, 0, None, None)
    )
    shell.SHFileOperation (
    (0, shellcon.FO_COPY, filename1, filename2, shellcon.FOF_RENAMEONCOLLISION, None, None)
    )
    shell.SHFileOperation (
    (0, shellcon.FO_COPY, filename1, filename2, 0, None, None)
    )

    if os.path.isfile (filename2): print "Success"

    dirname1
    = tempfile.mktemp (".dir")
    os.mkdir (dirname1)
    dirname2
    = dirname1 + ".copy"
    print dirname1, "=>", dirname2

    #拷目录
    shell.SHFileOperation (
    (0, shellcon.FO_COPY, dirname1, dirname2, 0, None, None)
    )

    if os.path.isdir (dirname2): print "Success"
    不知道有没有其它的了,os.rename不算,那个是移动文件。另外我在测试它们的性能如何。
    http://timgolden.me.uk/python/win32_how_do_i/copy-a-file.html
    这里和楼主列出的都一样,没有更多的了
    或者使用Chilkat http://www.chilkatsoft.com/refdoc/pythonCkFileAccessRef.html

    测试结果出来了:
    测试环境:系统——Win7 RTM,CPU——P4 3.0,MEM——1.5G DDR400,U盘——Kingston 4G

    用4种不同的方法从硬盘拷贝MSDN 2008 SP1(2.37G)到U盘:

    os System      的方法耗时903.218秒
    shutil        的方法耗时1850.634秒
    win32file      的方法耗时861.438秒
    SHFileOperation的方法耗时794.023秒

    另外SHFileOperation是显示对话框的,可以这样用
    shell.SHFileOperation (
    (0, shellcon.FO_COPY, filename1, filename2,
    shellcon.FOF_RENAMEONCOLLISION
    | \
    shellcon.FOF_NOCONFIRMATION
    |\
    shellcon.FOF_NOERRORUI
    | \
    shellcon.FOF_SILENT, None, None)
    )
    
    
  • 相关阅读:
    100 numpy exercises
    IndentationError: unindent does not match any outer indentation level
    Git详解之七:自定义Git
    Git详解之六:Git工具
    Git详解之五:分布式Git
    Git详解之四:服务器上的Git
    Git详解之三:Git分支
    Git详解之二:Git基础
    Git详解之一:Git起步
    Jquery基础之事件操作
  • 原文地址:https://www.cnblogs.com/buro79xxd/p/1682560.html
Copyright © 2011-2022 走看看