1.计算文件夹的大小
请看上一篇博客。Day17.
2.os模块
# ### os 和 shutil 模块 ''' 文件操作领域: os => 新建和删除 shutil => 复制和剪切 ''' import os # 默认更改工作路径 os.chdir("/home/wangwen/mywork") #os.mknod 创建文件 # os.mknod("ceshi1014.txt") #os.remove 删除文件 # os.remove("ceshi1014.txt") #os.mkdir 创建目录(文件夹) # os.mkdir("ceshi1001") #os.rmdir 删除目录(文件夹) # os.rmdir('ceshi1001') #os.rename 对文件,目录重命名 # os.rename("ceshi1001","ceshi1002") #os.makedirs 递归创建文件夹 # os.makedirs("a/b/c/d") #os.removedirs 递归删除文件夹(空文件夹) # os.removedirs("./a/b/c/d") # -- shutil模块 复制/移动/ # (1)仅仅复制文件内容的 #copyfileobj(fsrc, fdst[, length=16*1024]) 复制文件 (length的单位是字符(表达一次读多少字符)) import shutil fp1 = open("./3.txt","r",encoding="utf-8") fp2 = open("./4.txt","w",encoding="utf-8") shutil.copyfileobj(fp1,fp2) #copyfile(src,dst) #单纯的仅复制文件内容 , 底层调用了 copyfileobj shutil.copyfile("3.txt","5.txt") # copyfile 如果没有这个文件,自动创建 # (2)仅仅复制权限的 #copymode(src,dst) #单纯的仅复制文件权限 , 不包括内容 (虚拟机共享目录都是默认777) shutil.copymode("3.txt","6.txt") # copymode 复制权限等操作的时,该文件必须存在 #copystat(src,dst) #复制所有状态信息,包括权限,组,用户,修改时间等,不包括内容 shutil.copystat("3.txt","7.txt") # (3)既复制文件内容 还 复制文件权限的 ***** #copy(src,dst) #复制文件权限和内容 shutil.copy("3.txt","8.txt") #copy2(src,dst) #复制文件权限和内容,还包括权限,组,用户,时间等 shutil.copy2("3.txt","9.txt") # (4)递归拷贝或删除 #copytree(src,dst) #拷贝文件夹里所有内容(递归拷贝) # shutil.copytree("/home/wangwen/mywork","/home/wangwen/mywork2") #rmtree(path) #删除当前文件夹及其中所有内容(递归删除) # shutil.rmtree("/home/wangwen/mywork2") #move(path1,paht2) #移动文件或者文件夹 # shutil.move("./ceshi1002","../ceshi10003")
3.shtil模块
同上
4.zipfile
# ### 压缩模块 zipfile # (1) 创建一个zip压缩包 import zipfile # zip_deflated 代表是压缩的意思 # 打开压缩包 zf = zipfile.ZipFile("ceshi1136.zip","w",zipfile.ZIP_DEFLATED) print(zf) # 写入文件 # write("路径","别名") zf.write("/bin/cat","qqq") zf.write("/bin/cp","chacl") zf.write("/bin/chgrp","chgrp") # 关闭压缩包 zf.close() # (2) 解压文件 zf = zipfile.ZipFile("ceshi1136.zip","r") # extractall("路径") 解压所有文件到一个文件夹当中 # zf.extractall("./ceshi1136") # zf.extract("文件名","路径") 解压单个文件到一个文件夹当中 zf.extract("chgrp","./ceshi1136_2") zf.close() # (3) 追加文件 # zipfile 同样支持with语法 with zipfile.ZipFile("ceshi1136.zip","a",zipfile.ZIP_DEFLATED) as zf: # 在添加文件的时候,可以动态为该文件创建文件夹 zf.write("/bin/cp","/abd/cp") # (4) 查看压缩包中的内容 with zipfile.ZipFile("ceshi1136.zip","r") as zf: res = zf.namelist() print(res)
5.tarfile
# ### tarfile 压缩模块 import tarfile # (1)创建tarfile 压缩包 tf = tarfile.open("ceshi001.tar","w",encoding="utf-8") # add(路径,别名) 添加文件到压缩包当中 tf.add("/bin/dash","dash") tf.add("/bin/dd","dd") tf.add("/bin/df","/tmp/df") # 关闭压缩包 tf.close() # 327680 # 按照gz算法 创建一个.tar.gz的压缩包 tf = tarfile.open("ceshi001.tar.gz","w:gz",encoding="utf-8") tf.add("/bin/dash","dash") tf.add("/bin/dd","dd") tf.add("/bin/df","/tmp/df") tf.close() # 162558 # 按照bz2算法 创建一个.tar.bz2的压缩包 tf = tarfile.open("ceshi001.tar.bz2","w:bz2",encoding="utf-8") tf.add("/bin/dash","dash") tf.add("/bin/dd","dd") tf.add("/bin/df","/tmp/df") tf.close() # 147524 # 理论上:bz2算法压缩包要比gz算法压缩的包小. # (2) 解压文件 tf = tarfile.open("ceshi001.tar.gz","r",encoding="utf-8") # 一次性解压所有 # tf.extractall("ceshi001") # 解压单个文件 tf.extract("dd","ceshi001_dd") tf.close() # (3) 追加文件 ''' tarfile 有局限性,不能对已经压缩好的包进行追加文件 只能对光打包不压缩的文件进行追加 ''' # with tarfile.open("ceshi001.tar.bz2","a",encoding="utf-8") as tf: with tarfile.open("ceshi001.tar","a",encoding="utf-8") as tf: # add(路径,别名) tf.add("/bin/sleep","sleep") # (4) #查看压缩包中的内容 with tarfile.open("ceshi001.tar","r",encoding="utf-8") as tf: res = tf.getnames() print(res) # ###对tarfile 的追加进行改写 ''' (1) 把原来的压缩包进行解压 (2) 把要追加的文件塞进去 (3) 重新过滤,重新打包 ''' import os #__file__ res = os.getcwd() path1 = os.path.join(res,"ceshi001.tar.bz2") path2 = os.path.join(res,"ceshi0011") print(path1) #/mnt/hgfs/gongxiang_16/day17/ceshi001.tar.gz print(path2) #/mnt/hgfs/gongxiang_16/day17/ceshi0011 # (1) 把原来的压缩包进行解压 with tarfile.open(path1,mode="r",encoding="utf-8") as tf: tf.extractall(path2) # (2) 把要追加的文件塞进去 # os.system("cp -a /bin/login /mnt/hgfs/gongxiang_16/day17/ceshi0011") os.system("cp -a /bin/login " + path2) # (3) 开始过滤,dd这个文件过滤掉不要了 lst = os.listdir(path2) # print(lst) # for i in lst: # print(i) with tarfile.open(path1,"w:bz2",encoding="utf-8") as tf: for i in lst: #/mnt/hgfs/gongxiang_16/day17/ceshi0011/dash pathnew = os.path.join(path2,i) if i != "dd": # add(路径,文件/文件夹) tf.add(pathnew,i)