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

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 遍历 ArrayList[通俗易懂]

    遍历 ArrayList[通俗易懂]packagecom.List;importjava.util.*;publicclassListTest{publicvoidlisttest(){Listlist=newArrayList();  list.add(“Hello”);  list.add(“World”);  list.add(“HAHAHAHA

  • sql server 字符串转成日期格式_sql datetime转字符串

    sql server 字符串转成日期格式_sql datetime转字符串一、sqlserver日期时间函数SqlServer中的日期与时间函数1.当前系统日期、时间selectgetdate()2.dateadd在向指定日期加上一段时间的基础上,返回新的datetime值例如:向日期加上2天selectdateadd(day,2,’2004-10-15′)–返回:2004-10-17

  • MongoDB 基础

    MongoDB 基础

  • git拉取代码密码错误_idea提交git

    git拉取代码密码错误_idea提交gitgit提交代码1:一定要先pull,(在本地建立仓库)eclipse中点击file找到term中的pull,同步拉取远程代码,idea中tomcat旁边斜向下箭头,拉取,首次拉取要输入用户名密码,2:提交到本地仓库commit,并填写提交备注,方便查找,3:push推送远程分支,提交到git分支。常见的pull失败:冲突-多个人修改同一个文件,别人修改后自己也修改导致拉取失败,解决冲突…

    2022年10月21日
  • linux ioctl函数详解,ioctl函数详解「建议收藏」

    linux ioctl函数详解,ioctl函数详解「建议收藏」1.介绍Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的信息,所以,我们有必要了解一下ioctl函数的具体实现.2.相关结构体与相关函数#includeintioctl(intd,intrequest,….);参数:d-文件描述符,这里是对网络套…

    2022年10月18日
  • 前端性能的优化_概括介绍

    前端性能的优化_概括介绍之前有整理过一部分知识点,一直没有发布,因为都是有关CSS方面的零散内容;现在想想无论做什么都需要慢慢积累,所以还是决定将之前整理的相关内容验证之后慢慢分享给你们,现在看到感觉还挺有意思。好了废话不多说,直接上代码以及图例(为了让大家方便阅读,都有自己验证过程的一些图片作为分享)。1.前端性能优化点:1.4个层面与8个点。1.4个层面:1.网络层面2.构建层面3.浏览器渲染层面4.服务端层面2.8个点:1.资源的合并与压缩。2

    2022年10月26日

发表回复

您的电子邮箱地址不会被公开。

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