这里有九种方法来演示“如何在Python中复制文件”。shutilcopyfile()方法shutilcopy()方法shutilcopyfileobj()方法shutilcopy2()方法ospopen方法ossystem()方法Thread()方法subprocesscall()方法subprocesscheck_output()方法1.ShutilCopyfile()方法This仅当目标可写时,方法才将源的内容复制到目标。如果您没有写权限,则会引发IOError。它通过打开输入文件来读取,忽略其文件类型。接下来,它不会以任何不同方式处理特殊文件,也不会将它们复制为新的特殊文件。CopyFile()方法利用下面的copyfileobj()的低级功能。它将文件名作为参数,打开它们并将文件句柄传递给copyfileobj()。此方法中有一个可选的第三个参数,您可以使用它来指定缓冲区长度。然后它将打开文件以读取指定缓冲区大小的块。但是,默认行为是一次读取整个文件。以下是有关copyfile()方法的要点。它将源的内容复制到名为目标的文件中。如果目标不可写,则复制操作将引发IOError异常。如果源文件和目标文件相同,它将返回SameFileError。但是,如果目标以不同的名称预先存在,则副本将覆盖其内容。如果destination是一个目录,则表示该方法不会复制到该目录,会出现错误13。它不支持复制字符或块设备和管道等文件。2.ShutilCopy()方法copy()方法的作用类似于Unix中的“CP”命令。这意味着如果目标是一个文件夹,那么它将在其中创建一个与源文件同名(基本名称)的新文件。此外,此方法将在复制其内容后将目标文件的权限与源文件的权限同步。如果要复制相同的文件,它还会抛出SameFileError。3.ShutilCopyfileobj()方法该方法将文件复制到目标路径或文件对象。如果目标是文件对象,则需要在调用copyfileobj()后显式关闭它。它采用一个可选参数(缓冲区大小),您可以使用该参数提供缓冲区长度。这是复制期间内存中保存的字节数。系统使用的默认大小为16KB。4.ShutilCopy2()方法但是,copy2()方法的功能与copy()类似。但是,在复制数据时,也可以将访问和修改时间添加到元数据中。复制相同的文件会导致SameFileError。对于好奇-Copymode()与Copystat()之间的区别。5.OsPopen()方法该方法创建一个进出命令的管道。它返回一个连接到管道的打开的文件对象。您可以根据文件打开模式(即“r”(默认)或“w”)将其用于读取或写入。模式——它可以是“r”(默认)或“w”。bufsize–如果其值为0,则不会发生缓冲。如果设置为1,文件将在访问时进行行缓冲。如果您提供的值大于1,则将以指定的缓冲区大小进行缓冲。但是,对于负值,系统采用默认缓冲区大小。适用于Windows操作系统。对于Linux操作系统。6.OsSystem()方法这是运行任何系统命令最常用的方法。使用system()方法,可以在子shell中调用任何命令。在内部,此方法调用标准C库函数。此方法返回命令的退出状态。适用于Windows操作系统。对于Linux操作系统。7.异步方式使用线程库的Python文件复制如果你想以异步方式复制文件,使用下面的方法。在这里,我们使用Python的线程模块在后台运行复制操作。使用这种方法时,一定要使用锁来避免死锁。如果您的应用程序使用多个线程来读/写文件,您可能会遇到它。8.在Python中使用subprocess的Call()方法复制文件subprocess模块提供了一个简单的接口来处理子进程。它使我们能够启动一个子进程,附加到它的输入/输出/错误管道,并检索返回值。subprocess模块旨在替换遗留模块和功能,例如os.system、os.spawn*、os.popen*、popen2。*。它公开了一个call()方法来调用系统命令来执行用户任务。9.使用子进程的Check_output()方法在Python中复制文件使用子进程的check_output()方法,您可以运行外部命令或程序并捕获其输出。它还支持管道。
