【转】Windows下用Python你会几种copy文件的方法?
:500px;width: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)
 )
 
- 
    作者:Buro#79xxd
出处:http://www.cnblogs.com/buro79xxd/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
 
                    
                 
     
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号