您的位置:首页 > 编程语言 > Python开发

Python 中的几种copy用法

2010-11-11 16:06 417 查看
不知道在什么时候看到个好帖,觉得好就移过来了,学习学习。。。

1.os.system

Pythoncode
importos
importtempfile

filename1=tempfile.mktemp(".txt")#产生临时文件或目录,tempfile.mktemp(suffix='',prefix='tmp',dir=None)
产生的文件名或目录,默认就是函数里的参数。

open(filename1,"w").close()
filename2=filename1+".copy"
printfilename1,"=>",filename2
#拷文件
os.system("copy%s%s"%(filename1,filename2))
ifos.path.isfile(filename2):print"Success"

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

#拷目录
os.system("xcopy/s%s%s"%(dirname1,dirname2))#DOS下,拷贝目录命令xcopy
ifos.path.isdir(dirname2):print"Success"


2.shutil.copy和shutil.copytree


Pythoncode
importos
importshutil
importtempfile

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

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

ifos.path.isfile(filename2):print"Success"

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

#拷目录
shutil.copytree(dirname1,dirname2)
ifos.path.isdir(dirname2):print"Success"



3.win32file.CopyFile

Pythoncode
importos
importwin32file
importtempfile

filename1=tempfile.mktemp(".txt")
open(filename1,"w").close()
filename2=filename1+".copy"
printfilename1,"=>",filename2
#拷文件
#文件已存在时,1为不覆盖,0为覆盖
win32file.CopyFile(filename1,filename2,1)
win32file.CopyFile(filename1,filename2,0)
win32file.CopyFile(filename1,filename2,1)

ifos.path.isfile(filename2):print"Success"

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

#拷目录
win32file.CopyFile(dirname1,dirname2,1)
ifos.path.isdir(dirname2):print"Success"


4.SHFileOperation


Pythoncode
importos
fromwin32com.shellimportshell,shellcon
importtempfile

filename1=tempfile.mktemp(".txt")
open(filename1,"w").close()
filename2=filename1+".copy"
printfilename1,"=>",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)
)

ifos.path.isfile(filename2):print"Success"

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

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

ifos.path.isdir(dirname2):print"Success"
测试结果出来了:
测试环境:系统——Win7RTM,CPU——P43.0,MEM——1.5GDDR400,U盘——Kingston4G

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

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

另外SHFileOperation是显示对话框的,可以这样用SHFileOperation能操作网络上的文件
如果你想将本地文件复制到192.168.1.99
那么只要在192.168.1.99上共享123目录
然后将pTo设置为http://www.cnblogs.com/lovemo1314/admin/file://192.168.1.99/123
就可以了
但不要设置为http://www.cnblogs.com/lovemo1314/admin/file://192.168.1.99/

Pythoncode[code]shell.SHFileOperation(
(0,shellcon.FO_COPY,filename1,filename2,
shellcon.FOF_RENAMEONCOLLISION|
\shellcon.FOF_NOCONFIRMATION|\
shellcon.FOF_NOERRORUI|\
shellcon.FOF_SILENT,None,None))
FOF_SILENT//不产生正在复制的对话框
FOF_NOCONFIRMMKDIR//如果目的目录不存在,就默认创建
FOF_NOCONFIRMATION//不出现确认文件替换对话框(ConfirmationDialog)(默认替换原来的文i件)
FOF_NOERRORUI//不出现错误对话框
最好不要同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR,因为FOF_NOCONFIRMMKDIR屏蔽了missingdirectoryError
但FOF_NOERROR又屏蔽了missingdirectoryError,那么在同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: