Windows下用Python你会几种copy文件的方法以及效率分析

来源:互联网 发布:天锐数据安全软件 编辑:程序博客网 时间:2024/05/18 02:24

001:os.system

import osimport tempfilefilename1 = 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 osimport shutilimport tempfilefilename1 = 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 osimport win32fileimport tempfilefilename1 = 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 osfrom win32com.shell import shell, shellconimport tempfilefilename1 = 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"

测试环境:系统——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秒

文章转自:http://bbs.csdn.net/topics/320025687









原创粉丝点击