神木网站设计公司,软文内容,建设银行积分兑换网站,dede中英文网站切换上接python自动化办公#xff08;一#xff09; 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作
使用shutil库
shutil库也是Python标准库#xff0c;它可以处理文件、文件夹、压缩包#xff0c;能实现文件复制、移动、压缩、解压缩等功能。… 上接python自动化办公一 文章目录文件和目录操作使用shutil库文件查找globfnmatchhashlib文件和目录操作
使用shutil库
shutil库也是Python标准库它可以处理文件、文件夹、压缩包能实现文件复制、移动、压缩、解压缩等功能。
函数说明copy复制文件和权限copy2复制文件和元数据copyfile将一个文件的内容复制到另外一个文件当中copyfileobj将一个文件的内容复制到另外一个文件当中copytree复制整个文件目录move递归地移动文件或目录原文件或目录就不存在了rmtree删除一个目录以及目录内的所有内容make_archive创建压缩包并返回文件路径unpack_archive解压缩文件
复制文件是比较复杂的事情。文件主要由两部分组成一部分是文件的数据另一部分是用来描述该文件的元数据。元数据指文件的访问时间、修改时间、作者等信息。所以复制文件时要弄清楚是仅复制内容还是同时要复制元数据。
# shutil.copyfile(A,B)仅仅是复制A文件的内容到B文件。A和B必须是文件不可以是目录。B文件得有写入权限
shutil.copyfile(./python_zen.txt,./copy01.txt)#手动新建文件夹copyfiles
#复制文件到某个文件夹
shutil.copy(./copy01.txt,./copyfiles/)#整体复制文件夹
shutil.copytree(./copyfiles/,./copyfiles01/)#移动文件
shutil.move(./copyfiles01/copy01.txt,./copyfiles/copy02.txt)#整体移动目录移动目录本身
shutil.move(./copyfiles01/,./copyfiles/)在os模块里os.rmdir方法和os.removedirs方法都要求被删除的目录非空否则会报错。而shutil.rmtree方法不管目录是否非空都直接删除整个目录。
#删除整个目录
shutil.rmtree(./copyfiles/copyfiles01/)#删除单个文件
import os
os.unlink(./copy01.txt)#压缩
#参数分别为保存压缩包路径及名称格式要压缩文件的路径
shutil.make_archive(./压缩包,zip,base_dir./copyfiles/)更多参数可以直接网上搜这应该够用了
#解压
#压缩包路径及名称解压至指定文件夹
shutil.unpack_archive(./压缩包.zip,./解压文件)文件查找
glob
glob是Python自带的一个文件操作相关模块用它可以查找符合条件的文件。
import glob
#匹配条件*匹配任意个字符匹配单个字符[]匹配指定范围字符如[0-9]
glob.glob(*.txt)fnmatch
fnmatch也是Python自带的库是专门用来进行文件名匹配的模块使用它可以完成更为复杂的文件名匹配。
#找出目标文件夹里所有结尾带数字的文件
import os,fnmatch
for foldName,subfolders,filenames in os.walk(./):for filename in filenames:if fnmatch.fnmatch(filename,*[0-9].*):print(filename)fnmatchcase和fnmatch函数类似只是fnmatchcase函数强制区分字母大小写。
以上两个函数都返回True或者Falsefilter函数则返回匹配的文件名列表。
fileList[]
for foldName,subfolders,filenames in os.walk(./):for filename in filenames:fileList.append(filename)
print(fileList:\n,fileList)
print(fnmatch.filter(fileList,*[0-9].*))hashlib
如果要找出重复文件重复文件可能有不同的文件名不能简单用文件名和文件大小来判断。从科学角度最简单的办法就是通过MD5来确定两个文件是不是一样的。 Python自带的hashlib库里提供了获取文件MD5值的方法。
import hashlib
mhashlib.md5()
fopen(./python_zen.txt,rb)
m.update(f.read())
f.close()
md5_valuem.hexdigest()
print(md5_value)#文件树状图
import os
def filetree(path,depth):if depth0:print(文件夹:path)for file in os.listdir(path):print(| *depth--file)directorypath/fileif os.path.isdir(directory):filetree(directory,depth1)
filetree(./,0)# 手动随意创建一个空文件夹删除空文件夹
import os,shutil
path./
for file in os.listdir(path):directorypathfileif os.path.isdir(directory) and len(os.listdir(directory))0:print(directory,os.listdir(directory))shutil.rmtree(directory)# 删除重复文件
import os,shutil,hashlib
path./重复文件
list[]
print(重复文件文件夹内容:)
for foldName,subfolders,filenames in os.walk(path):for filename in filenames:print(foldName,filename)
print(重复文件为:)
for file in os.listdir(path):fileNamepath/filemhashlib.md5()with open(fileName,rb) as mfile:m.update(mfile.read())md5_valuem.hexdigest()if md5_value in list:print(fileName)os.unlink(fileName)#删除重复文件else:list.append(md5_value)