有一个带有方法的Python3 shutil库:
- 复制文件obj
- 拷贝文件
- 复制模式
- 复制统计
- 复制
- 副本2
- 复制树
- 忽略模式
问题:
这些方法有什么区别?简而言之,如果不难,请解释每种情况适用于什么情况?
例如,在没有文件本身的情况下如何复制元数据不是很清楚,具体在哪里?相反,文件与元数据是分开的,那么元数据从何而来?
如果您需要常规文件副本,那么该使用哪一个?
有一个带有方法的Python3 shutil库:
问题:
这些方法有什么区别?简而言之,如果不难,请解释每种情况适用于什么情况?
例如,在没有文件本身的情况下如何复制元数据不是很清楚,具体在哪里?相反,文件与元数据是分开的,那么元数据从何而来?
如果您需要常规文件副本,那么该使用哪一个?
如果阅读文档
shutil.copyfileobj()对您来说还不够,那么您可以查看源代码:也就是说:我们试图从输入文件中读取给定长度的一段,如果我们读取了一些内容,那么我们将其写入输出文件,否则我们完成循环 - 就是这样。可用于在任何类似文件的对象之间复制内容(使用方法
read(),write())。copyfile()接受路径,而不是文件本身(因此有所不同)。如果输入包含常规文件的路径,那么它可以copyfile(src, dst)归结为一个简单的:打开文件,复制内容。
copymode(),copystat()归结为读取源文件元数据并将其应用于输出文件(复制访问模式与复制访问模式 + 访问/修改时间 + 标志,即分别只是 chmod vs utime + chmod + chflags + setxattr)。文档明确说明了应该复制的内容。如果输出文件不存在,则没有可应用元数据的任何内容,并且这些函数将失败并出现错误 (
FileNotFoundError)。文件本身的内容,谁是所有者,文件所属的组,不会被这些函数改变。
当元数据没有显式复制时,使用默认值(例如,可能取决于umask值)。
这取决于您在“正常复制”一词中的含义。
copy()copy2()这只是copyfile()一个电话,然后分别是copymode()和copystat()。另外,这些函数,不像copyfile()可以接受一个文件夹在哪里写。文档明确提到
copy(src, dst)这是cp src dst,而copy2(src, dst)这是cp -p src dst。第二个命令尝试复制更多元数据:读/写/执行权限、所有者、修改/访问时间(copy2()不像cp -p不复制所有者)。copytree()递归地复制整个目录树,因此很难将其与其他功能混淆。copytree()默认情况下用于copy_function=copy2复制常规文件。ignore_patterns(*patterns)返回一个函数,该函数在调用时可用作ignore参数值copytree()(ignore(src, names)该函数返回那些names=os.listdir(src)不应从src与当前递归调用对应的目录中复制的名称)。查看示例很有用:source该文件夹被递归复制到新destination文件夹,忽略带有扩展名或以( glob 模式,如命令行.pyc)开头的名称。tmpcopyfile仅复制数据,同时copy复制另一位权限。Copyfile工作得更快copy。Copyfile ()调用该方法copyfileobj (),而它通过调用andcopy ()函数工作。该调用会创建一个名为 my_scripts_backup 的新文件夹,其内容与原始 my_scripts 文件夹相同。例如 :copyfile ()copystat ()shutil.copytree()