Python 中的几种copy用法「建议收藏」

Python 中的几种copy用法「建议收藏」不知道在什么时候看到个好帖,觉得好就移过来了,学习学习。。。1.os.systemPythoncodePythoncode3.win32file.CopyFilePythoncodeP

大家好,又见面了,我是你们的朋友全栈君。

不知道在什么时候看到个好帖,觉得好就移过来了,学习学习。。。

1. os.system

Python code
   
   
import os import tempfile filename1 = tempfile.mktemp ( " .txt " ) #产生临时文件或目录,tempfile.mktemp(suffix='',prefix='tmp',dir=None) 产生的文件名或目录,默认就是函数里的参数。
   
   
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)) #DOS下,拷贝目录命令xcopy if os.path.isdir (dirname2): print " Success "
   
   
 
   
   
2. shutil.copy和shutil.copytree
Python code
   
   
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

Python code
   
   
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
Python code
   
   
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 "
 
 
测试结果出来了:
测试环境:系统——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是显示对话框的,可以这样用

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/



Python 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 //不出现确认文件替换对话框(Confirmation Dialog)(默认替换原来的文i件)
FOF_NOERRORUI//不出现错误对话框
最好不要同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR,因为FOF_NOCONFIRMMKDIR屏蔽了missing directory Error
但FOF_NOERROR又屏蔽了missing directory Error,那么在同时使用FOF_NOERRORUI,FOF_NOCONFIRMMKDIR

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155984.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Memwatch使用说明

    Memwatch使用说明linux下的测试工具真是少之又少,还不好用,最近试用了memwatch,感觉网上的介绍不太好,所以放在这里跟大家分享 。其实大部分都是看的帮助,很多地方翻译得不好还有错,请原谅指出最好看原文。如果转载或引用,请注明我的博客地址,谢谢。 1介绍MemWatch由 Johan Lindh 编写,是一个开放源代码 C 语言内存错误检测工具。MemWatch支持 ANSI C,它提供结果日志纪录

    2022年7月13日
    21
  • Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」

    Canvas之translate、scale、rotate、skew方法讲解!「建议收藏」前面说Canvas大致可以分为三类:1.save、restore等与层的保存和回滚相关的方法;2.scale、rotate、clipXXX等对画布进行操作的方法;3.drawXXX等一系列绘画相关的方法;前面主要讲了drawBitmap方法,并举了一个星球浮动的栗子,在那个例子中,星球有大有小,需要移动,有时候可能需求上还需要旋转或错切,有了这些需求,我们就需要使用到与Canvas相关的translate、scale、rotate、skew这几个方法,平移、缩放、旋转、错切,这四个词听起

    2025年8月6日
    4
  • 算法系列之九:计算几何与图形学有关的几种常用算法(一)

    算法系列之九:计算几何与图形学有关的几种常用算法(一)我的专业是计算机辅助设计(CAD),算是一半机械一半软件,《计算机图形学》是必修课,也是我最喜欢的课程。热衷于用代码摆平一切的我几乎将这本教科书上的每种算法都实现了一遍,这种重复劳动虽然意义不大,但是收获很多,特别是丢弃了多年的数学又重新回到了脑袋中,算是最大的收获吧。尽管已经毕业多年了,但是每次回顾这些算法的代码,都觉得内心十分澎湃,如果换成现在的我,恐怕再也不会有动力去做这些事情了。

    2025年6月8日
    3
  • java二维数组初始化的三种方式「建议收藏」

    java二维数组初始化的三种方式「建议收藏」有些知识觉得很简单,但其中一些细节性的东西我们未必知道,比如说数组的定义以及初始化的方式。下面主要介绍下二位数组初始化的三种方式1、定义数组的同时使用大括号直接赋值,适合数组元素已知的情况2、定义二维数组的大小,然后分别赋值3、数组第二维的长度可变化//第一种方式:定义的同时大括号直接复制int[][]array1={{1,3,1},{…

    2022年5月9日
    90
  • idea 20213.3激活码(最新序列号破解)

    idea 20213.3激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    2.0K
  • Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso「建议收藏」

    Error creating bean with name ‘sqlSessionFactory‘ defined in class path reso「建议收藏」文章目录问题原因解决问题网上找的方案问题原因今天学习spring时,出现这个问题,网上查了很多,大家错误各自不同,我一个一个改了之后还是报这个错误,总结了一下大家的改错方案,我发现百分之八十都是spring配置文件有错误。于是根据总结的东西和大家改错的方案,阅读错误信息可知,是sqlSessionFactory创建时出现了问题。这时候请大家看spring-dao.xml(每个人给配置文件的命名有所不同,不一定是这个名,反正就是spring的xml配置文件)后面的报错信息,根据报错信息找到你自己的

    2022年4月27日
    136

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号