• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python高级文件操作之shutil库详解

python 搞代码 4年前 (2022-01-09) 54次浏览 已收录 0个评论
文章目录[隐藏]

前言

什么算是高层的文件操作呢?

普通的文件操作,我们一般只涉及创建文件,文件夹以及写入文件等等。假如我现在需要复制一个文件的内容到另一个文件之中,用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))

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python高级文件操作之shutil库详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址