有一个带有方法的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
)开头的名称。tmp
copyfile
仅复制数据,同时copy
复制另一位权限。Copyfile
工作得更快copy
。Copyfile ()
调用该方法copyfileobj ()
,而它通过调用andcopy ()
函数工作。该调用会创建一个名为 my_scripts_backup 的新文件夹,其内容与原始 my_scripts 文件夹相同。例如 :copyfile ()
copystat ()
shutil.copytree()