前言
什么算是高层的文件操作呢?
普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等。假如我现在需要复制一个文件的内容到另一个文件之中,用pathlib等都只能先打开复制文件,然后进行将其读出来保存,然后再写入新的文件,这种普通的复制操作,无形之中增加了许多步骤。
而shutil库可以直接完成复制符间的操作,同时还支持归档。本篇,将详细介绍文件的高层次操作。
一、copyfile()
copyfile()函数用于将一个文件的内容复制到另一个文件之中,准备的来说,它不是copy内容,而是直接copy文件,并重命名。
示例如下:
import shutil shutil.copyfile('week.csv', 'week_copy.csv')
很简单,就一行代码,第1个参数是需要copy的源文件,第2个参数是需要复制的新文件。运行之后,效果如下:
二、copy()与copy2()
不过,copyfile()函数用于复制文件有一个缺陷,该函数的原理是通过打开源文件进行读取。所以,如果是某些特殊的文件,比如是UNIX设备节点,没有权限会报IOERROR错误。
还需要注意的是,通过copyfile()函数复制的文件是一个新文件,它不包括旧文件的访问时间与修改时间。
而copy2()函数可以复制文件后保留访问时间,修改时间。示例如下:
import shutil import os import time shutil.copy2('week.csv', 'week_copy.csv') stat_info1 = os.stat('week.csv') stat_info2 = os.stat('week_copy.csv') print("源文件信息") print(oct(stat_info1.st_mode)) print('文件创建时间:{}'.format(time.ctime(stat_info1.st_ctime))) print('文件访问时间:{}'.format(time.ctime(stat_info1.st_atime))) print('文件修改时间:{}'.format(time.ctime(stat_info1.st_mtime))) print("复制文件信息") print(oct(stat_info2.st_mode)) print('文件创建时间:{}'.format(time.ctime(stat_info2.st_ctime))) print('文件访问时间:{}'.format(time.ctime(stat_info2.st_atime))) print('文件修改时间:{}'.format(time.ctime(stat_info2.st_mtime)))
运行之后,效果如下:
三、copymode()与copystat()
通过copy2()函数,我们知道了如何复制文件内容和文件信息等操作。但是其复制并不包含文件的权限,比如我们的Win10系统C盘中,有些文件只能读不能写,那么如果将权限也复制过去呢?
答案是:copymode()函数,示例如下:
import shutil import os, stat with open("temp.txt", 'wt') as file: file.write("1111111<a style="color:transparent">本文来源gao($daima.com搞@代@#码(网5</a>1111111111") os.chmod("temp.txt", stat.S_IREAD) shutil.copymode('temp_copymode.txt', 'temp.txt') print(oct(os.stat('temp.txt').st_mode)) print(oct(os.stat('temp_copymode.txt').st_mode))