请在Chrome、Firefox等现代浏览器浏览本站。另外提供付费解决DEDE主题修改定制等技术服务,如果需要请 加我 QQ 说你的需求。

用Python复制文件的9个方法

python 中有许多“开盖即食”的模块以支撑文件 i/o 操作。在这篇文章中,你将会看到一些用 python 完成文件仿制的特别办法。下面咱们开端学习这九种不......

python 中有许多“开盖即食”的模块以支撑文件 i/o 操作。在这篇文章中,你将会看到一些用 python 完成文件仿制的特别办法。下面咱们开端学习这九种不同的办法来完成 python 仿制文件操作。

在开端之前,你有必要理解为什么了解最适合你的 python 仿制文件办法是如此重要。这是由于文件 i/o 操作归于功用密集型而且经常会到达瓶颈。这便是为什么你应该依据你的应用程序的规划挑选最好的办法。

一些共享资源的程序会倾向于以堵塞形式来仿制文件,而有些则或许期望以异步办法履行。比方 — 运用线程来仿制文件或许发动独自的进程来完成它。还有一点需求考虑的是渠道的可移植性。这意味着你应该知道你要运转的程序地点的方针操作体系。

用 python 仿制文件的 9 种办法详细是:

shutil copyfile办法

只有当方针是可写的,这个办法才会将源内容仿制到方针方位。假如你没有写入权限,则会导致 ioerror 反常。

它会翻开输入文件进行读取并疏忽其文件类型。接下来,它不会以任何不同的办法处理特别文件,也不会将它们仿制为新的特别文件。

copyfile 办法运用下面的初级函数 copyfileobj。它将文件名作为参数,翻开它们并将文件句柄传递给 copyfileobj。这个办法中有一个可选的第三个参数,你可用它来指定缓冲区长度。然后它会翻开文件并读取指定缓冲区巨细的块。可是,默许是一次读取整个文件。

copyfile

以下是关于 copyfile 办法的关键。

它将源内容仿制到方针文件中。

假如方针文件不行写入,那么仿制操作将导致 ioerror 反常。

假如源文件和方针文件都相同,它将会回来 samefileerror。

可是,假如方针文件之前有不同的称号,那么该副本将会掩盖其内容。

假如方针是一个目录,这意味着此办法不会仿制到目录,那么会发作 error 13。

它不支撑仿制比方字符或块驱动以及管道等文件。

# python copy file - sample code
from shutil import copyfile
from sys import exit
source = input
target = input
# adding exception handling
 copyfile
except ioerror as e:
 print
 exit
except:
 print)
 exit
print
while true:
 print: )
 check = input
 if check == n :
 break
 elif check == y :
 file = open
 print
 print)
 file.close
 print
 break
 else:
 continue

shutil copy办法

copyfile

copy 办法的功用类似于 unix 中的“cp”指令。这意味着假如方针是一个文件夹,那么它将在其间创立一个与源文件具有相同称号的新文件。此外,该办法会在仿制源文件的内容后同步方针文件权限到源文件。

import os
import shutil
source = current/test/test.py 
target = /prod/new 
assert not os.path.isabs
target = os.path.join)
# create the folders if not already exists
os.makedirs
# adding exception handling
 shutil.copy
except ioerror as e:
 print
except:
 print)

copy vs copyfile :

copy 还能够在仿制内容时设置权限位,而 copyfile 只仿制数据。

假如方针是目录,则 copy 将仿制文件,而 copyfile 会失利,呈现 error 13。

风趣的是,copyfile 办法在完成进程中运用 copyfileobj 办法,而 copy 办法则是顺次运用 copyfile 和 copymode 函数。

在 potion-3 能够很明显看出 copyfile 会比 copy 快一点,由于后者会有一个附加使命。

shutil copyfileobj办法

该办法将文件仿制到方针途径或许文件方针。假如方针是文件方针,那么你需求在调用 copyfileobj 之后封闭它。它还假定了一个可选参数,你能够用来设置缓冲区长度。这是仿制进程中保存在内存中的字节数。体系运用的默许巨细是 16kb。

from shutil import copyfileobj
status = false
if isinstance:
 target = open
 status = true
 copyfileobj
finally:
 if status:
 target.close

shutil copy2办法

尽管 copy2 办法的功用类似于 copy。可是它能够在仿制数据时获取元数据中增加的拜访和修正时刻。仿制相同的文件会导致 samefileerror 反常。

copy vs copy2 :

copy 只能设置权限位,而 copy2 还能够运用时刻戳来更新文件元数据。

copy 在函数内部调用 copyfile 和 copymode, 而 copy2 是调用 copystat 来替换copymode。

os popen办法

from shutil import *
import os 
import time
from os.path import basename
def displayfilestats:
 file_stats = os.stat)
 print
 print)
 print)
 print)
os.mkdir
print
displayfilestats
copy2
print
displayfilestats + /test/testfile ))

该办法创立一个发送或许接受指令的管道。它回来一个翻开的而且衔接管道的文件方针。你能够依据文件翻开形式将其用于读取或许写入比方‘r’或许‘w’。

os.popen

mode – 它能够是‘r’或许‘w’

bufsize – 假如它的值是0,那么就不会呈现缓冲。假如将它设置为1,那么在拜访文件时就会发作行缓冲。假如你供给一个大于1的值,那么就会在指定缓冲区巨细的状况下发作缓冲。可是,关于负值,体系将选用默许缓冲区巨细。

关于windows体系:

import os
os.popen

关于liunx体系:

import os
os.popen

os system办法

这是运转任何体系指令的最常用办法。运用 system 办法,你能够调用 subshell 中的任何指令。在内部,该办法将调用 c 言语的规范库函数。

该办法回来该指令的退出状况。

关于 windows 体系:

import os
os.system 

关于 liunx 体系:

import os
os.system

运用异步办法的线程库仿制文件

假如你想以异步办法仿制文件,那么运用下面的办法。在这里,咱们运用 python 的线程模块在后台进行仿制操作。

在运用这种办法时,请保证运用确定以防止锁死。假如你的应用程序运用多个线程读取/写入文件,就或许会遇到这种状况。

import shutil
from threading import thread
src= 1.txt.py 
dst= 3.txt.py 
thread.start

运用subprocess的call办法仿制文件

subprocess 模块供给了一个简略的接口来处理子进程。它让咱们能够发动子进程,衔接到子进程的输入/输出/过错管道,并检索回来值。

subprocess 模块旨在替换旧版模块和函数,比方 – os.system, os.spawn, os.popen, popen2.*

它运用 call 办法调用体系指令来履行用户使命。

import subprocess
src= 1.txt.py 
dst= 2.txt.py 
cmd= copy %s %s % 
status = subprocess.call
if status != 0:
 if status 0:
 print
 else:
 print
else:
 print

运用 subprocess 中的 check_output 办法仿制文件

运用 subprocess 中的 check_output 办法,你能够运转外部指令或程序并捕获其输出。它也支撑管道。

import os, subprocess
src=os.path.realpath + http://cdn.techbeamers.com/1.txt.py )
dst=os.path.realpath + http://cdn.techbeamers.com/2.txt.py )
cmd= copy %s %s % 
status = subprocess.check_output
print)