在 Python 中复制文件:shutil.copy()、shutil.copystat() 方法

Python 复制文件方法

Python 提供了内置函数,可利用操作系统 Shell 工具轻松复制文件。

用于复制文件的命令如下

shutil.copy(src,dst)

用于复制文件并保留元数据信息的命令如下

shutil.copystat(src,dst)

如何在 Python 中复制文件

以下是使用 shutil copy() 方法在 Python 中复制文件的步骤

步骤 1) 捕获当前目录中的原始文件路径
在复制文件之前,我们需要获取当前目录中原始文件的路径。在代码中——

  1. 声明变量
  2. 对变量应用 split 函数

Copy a File in Python

代码解释

  • 我们首先检查“guru99.txt”文件是否存在。由于我们之前已创建 guru99.txt 文件,因此我们知道它存在,并继续进行后续代码
  • 如果您的文件存在,我们将文件路径存储在变量“src”中
  • 获取路径后,我们将分离路径和文件名
  • 为此,我们将对源变量使用 split path.split 函数
  • 执行的代码将分别打印出“文件名”和“文件路径

步骤 2) 使用 shutil 模块创建现有文件的副本
我们使用 Shutil 模块来创建现有文件的副本。此处我们用于创建现有文件“guru99.txt”的副本。

Copy a File in Python

代码解释

  • 获取原始文件名“guru99.txt”,并在其末尾添加 .bak 字母,形成“guru99.txt.bak”。此带 .bak 扩展名的名称将是我们的副本
  • 然后,我们将使用实用程序的 copy 函数将文件从源复制到目标
  • 运行代码后,您将在面板的右侧看到一个带有 .bak 扩展名的重复文件

步骤 3) 复制与文件相关的元数据、文件权限和其他信息
copy 函数仅复制文件的内容,而不复制其他信息。要复制与文件相关的元数据、文件权限和其他信息,您必须使用“copystat”函数。在我们运行此代码之前,我们需要删除我们的副本文件“guru99.text.bak”。

Copy a File in Python

删除文件并运行程序后,它将创建 .txt 文件的副本,但这次会包含所有信息,例如文件权限、修改时间和元数据信息。您可以转到您的操作系统 Shell 来验证信息。

Copy a File in Python

这是代码

import os
import shutil
from os import path

def main():
    # make a duplicate of an existing file
	if path.exists("guru99.txt"):
    # get the path to the file in the current directory
        src = path.realpath("guru99.txt");
    
	#seperate the path from the filter
	head, tail = path.split(src)
	print("path:" +head)
	print("file:" +tail)
	
	#let's make a backup copy by appending "bak" to the name
	dst = src+".bak"
	# nowuse the shell to make a copy of the file
	shutil.copy(src, dst)
	
	#copy over the permissions,modification
	shutil.copystat(src,dst)
	
if __name__=="__main__":
	main()

步骤 4) 获取信息
您可以获取有关文本文件最后修改的信息

Copy a File in Python

  • 代码行#15- 它显示 .txt 文件(guru99)上次修改的日期、年月日和时间。我们使用 path 模块获取文件修改时间的详细信息,然后使用time 类的 ctime 函数将其转换为可读时间。因此,当我们运行代码时,可以看到文件 guru99.txt 是在2018 年 1 月 8 日星期一上午 13:35 最后修改的。
  • 代码行#17- 它执行相同操作,提供文件修改信息,但其表示格式不同。此处我们使用Get Modification Time 函数(path.getmtime(“guru99.txt”))。现在,我们不再使用 ctime 函数,而是使用From Timestamp 函数并构造一个 datetime 对象。在输出中,您可以看到文件修改时间的详细信息以不同格式打印出来:2018-01-08, 13:35:51.334072

这是代码

#
# Example file for working with o.s path module

import os
from os import path
import datetime
from datetime import date, time, timedelta
import time

def main():

    # Get the modification time
    t = time.ctime(path.getmtime("guru99.txt.bak"))
    print(t)
    print(datetime.datetime.fromtimestamp(path.getmtime("guru99.txt.bak")))

if __name__ == "__main__":
    main()

摘要

  • 要创建现有文件的副本,请使用代码 shutil.copy (src,dst)
  • 要将原始文件的所有信息复制到副本文件,例如文件权限、修改时间或元数据信息,请使用代码 shutil.copystat(src,dst)