在 Python 中复制文件:shutil.copy()、shutil.copystat() 方法
Python 复制文件方法
Python 提供了内置函数,可利用操作系统 Shell 工具轻松复制文件。
用于复制文件的命令如下
shutil.copy(src,dst)
用于复制文件并保留元数据信息的命令如下
shutil.copystat(src,dst)
如何在 Python 中复制文件
以下是使用 shutil copy() 方法在 Python 中复制文件的步骤
步骤 1) 捕获当前目录中的原始文件路径
在复制文件之前,我们需要获取当前目录中原始文件的路径。在代码中——
- 声明变量
- 对变量应用 split 函数
代码解释
- 我们首先检查“guru99.txt”文件是否存在。由于我们之前已创建 guru99.txt 文件,因此我们知道它存在,并继续进行后续代码
- 如果您的文件存在,我们将文件路径存储在变量“src”中
- 获取路径后,我们将分离路径和文件名
- 为此,我们将对源变量使用 split
path.split
函数 - 执行的代码将分别打印出“文件名”和“文件路径”
步骤 2) 使用 shutil 模块创建现有文件的副本
我们使用 Shutil 模块来创建现有文件的副本。此处我们用于创建现有文件“guru99.txt”的副本。
代码解释
- 获取原始文件名“guru99.txt”,并在其末尾添加 .bak 字母,形成“guru99.txt.bak”。此带 .bak 扩展名的名称将是我们的副本
- 然后,我们将使用实用程序的 copy 函数将文件从源复制到目标
- 运行代码后,您将在面板的右侧看到一个带有 .bak 扩展名的重复文件
步骤 3) 复制与文件相关的元数据、文件权限和其他信息
copy 函数仅复制文件的内容,而不复制其他信息。要复制与文件相关的元数据、文件权限和其他信息,您必须使用“copystat”函数。在我们运行此代码之前,我们需要删除我们的副本文件“guru99.text.bak”。
删除文件并运行程序后,它将创建 .txt 文件的副本,但这次会包含所有信息,例如文件权限、修改时间和元数据信息。您可以转到您的操作系统 Shell 来验证信息。
这是代码
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) 获取信息
您可以获取有关文本文件最后修改的信息
-
代码行#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)