第九天-自动化办公

1.基础-普通文件操作

1. shutil文件操作模块

文件的复制

  • 复制文件

from shutil import copy

copy("复制文件路径","目标位置")

  • 文件内容的复制

from shutil import copyfile

copyfile(来源文件,目标文件)

文件的剪切

可用于文件和文件夹

from shutil import move

move("源文件地址","目标地址")

文件的删除

from os import remove

remove("目标地址")

文件的压缩与解压

  • 压缩
  • 解压
复制代码
# coding:utf-8

import shutil
import os


copy_file=os.path.join(os.getcwd(),"shutill_test.py")
#shutil.copy(copy_file,os.path.join(os.getcwd(),"shutill_test1.py"))
#shutil.copyfile(copy_file,os.path.join(os.getcwd(),"shutill_test1.py"))
#shutil.move(os.path.join(os.getcwd(),"shutill_test1.py"),os.path.join(os.getcwd(),"shutill_test2.py"))

#shutil.make_archive("demo1","zip",os.path.join(os.getcwd(),"demo1"))

shutil.unpack_archive(os.path.join(os.getcwd(),"demo1.zip"),os.path.join(os.getcwd(),"demo1"))

文件夹的复制

from os import copytree

copytree("复制文件夹地址","目标地址")

文件夹的删除

from os import rmtree

copytree("文件夹地址")

2. glob文件与文件夹获取模块

介绍:glob是一个快速查找文件中内容的包,我们可以通过模糊查找的形式找到我们想要的内容;

使用: from glob import glob

glob(任意目录) 返回指定路径下的内容列表,不存在路径返回空列表

查找指定的文件

  1. 使用glob方法

2.递归文件夹进行查找

复制代码
#  coding:utf-8

from glob import glob
import os

#查找文件
reslut = []
def search(path,trage=""):
    #获取文件夹下的所有文件
    pathAll=glob(path+"/*")

    #循环文件,判断是否是文件夹和文件
    for p in pathAll:
        #判断是否是文件夹
        if os.path.isdir(p):
            print("这是一个文件夹:" + p)
            #递归查找
            search(p, trage)
        else:
            print("这是一个文件:"+p)
            if trage in p:
                reslut.append(p)
    return reslut

if __name__ == '__main__':
    path=os.getcwd()
    result=search(path,"shutil")
    print("查找结果:",result)

查找指定内容的文件

复制代码
#查找指定内容的文件
reslut_content = []
def search_content(path,content=""):

    #获取文件夹下的所有文件
    pathAll=glob(path+"/*")
    #循环文件,判断是否是文件夹和文件
    for p in pathAll:
        #判断是否是文件夹
        if os.path.isdir(p):
            #递归查找
            search_content(p, content)
        else:
           #读取文件
           f=open(p,"r")
           try:
                c=f.read()
                if content in c:
                    reslut_content.append(p)
           except:
                print("无法读取文件:",p)
                continue
           finally:
               #关闭刘
               f.close()
    return reslut_content
复制代码
if __name__ == '__main__':
    path=os.getcwd()

    result=search_content(path,"11")
    print("查找结果:",result)

清理重复文件

复制代码
# coding:utf-8
import os
from glob import glob
import hashlib


#查找重复文件
#1.递归遍历所有文件
#2.读取文件中的内容,将文件内容使用md5进行存储,如存在则删除,如不存在新增

#存储结构{"name":{"/name":"内容,"/name":"内容}}
#相同名称放入一级, 二级存放所有名称相同的路径和内容的md5
file_dict={}
def clear(path):
    #获取所有文件
    path_all=glob(path+"/*")
    for p in path_all:
        if os.path.isdir(p):
            #文件夹递归调用下一个方法
            clear(p)
        else:
            #如果为文件,读取文件内容
            #如果为zip文件,则使用rb读取
            try:
                name=os.path.split(p)[-1]
                if_byte=False
                if ".zip" in name:
                    #进行byte的读取,返回的是byte类型
                    f=open(p,"rb")
                    if_byte=True
                else:
                    f=open(p,"r",encoding="utf-8")
                content=f.read()
                if if_byte:
                    hash_content = hashlib.md5(content).hexdigest()
                else:
                    hash_content=hashlib.md5(content.encode("utf-8")).hexdigest()
                f.close()
                if name in file_dict:
                    #如果已经添加过则遍历里面的内容是否相同
                    subdict=file_dict[name]
                    if_del=False
                    for k,v in subdict.items():
                        if v == hash_content:
                            os.remove(p)
                            if_del=True
                    #如果没有被删除则放入字典中
                    if if_del==False:
                        file_dict[name][p] =hash_content
                else:
                    #存放内容
                    file_dict[name]={p: hash_content}
            except:
                print("异常")



if __name__ == '__main__':
    clear(os.getcwd())
    print("file_dict:",file_dict)

1.查找重复文件 #1.递归遍历所有文件

2.读取文件中的内容,将文件内容使用md5进行存储作为key存储,路径保存

3.返回过滤掉数量小于于1的md5

复制代码
# coding:utf-8
import os
from glob import glob
import hashlib


#查找重复文件
#1.递归遍历所有文件
#2.读取文件中的内容,将文件内容使用md5进行存储作为key存储,路径保存
#3.返回过滤掉数量小于于1的md5

#存储结构{"md5":["路径“,"路径"]}
#key存放md5值,value:存放路径
file_dict={}
file_dict_reslut={}
def search_repeat(path):
    #获取所有文件
    path_all=glob(path+"/*")
    for p in path_all:
        if os.path.isdir(p):
            #文件夹递归调用下一个方法
            search_repeat(p)
        else:
            #如果为文件,读取文件内容
            #如果为zip文件,则使用rb读取
            try:
                name=os.path.split(p)[-1]
                if_byte=False
                # 进行byte的读取,返回的是byte类型
                f = open(p, "rb")
                if_byte = True
                content=f.read()
                if if_byte:
                    hash_content = hashlib.md5(content).hexdigest()
                else:
                    hash_content=hashlib.md5(content.encode("utf-8")).hexdigest()
                f.close()
                #存放内容
                if hash_content in file_dict:
                    file_dict[hash_content].append(p)
                else:
                    file_dict[hash_content]=[p]
            except:
                print("异常")
    # 循环判断数量大于1的为存在重复文件
    for k, v in file_dict.items():
        if len(v) > 1:
            file_dict_reslut[k]=v



if __name__ == '__main__':
    search_repeat("E:\python学习\第07周 Python办公自动化")
    print("file_dict:",file_dict)
    print("file_dict_reslut:", file_dict_reslut)

批量更新文件

复制代码
# coding:utf-8

from glob import glob
import os
import shutil

#批量更新文件名
#批量在文件后追加文件名

def batch_update_filename(path,append_name):
    path_all=glob(path+"/*")

    for p in path_all:
        if os.path.isdir(p):
            #如果是文件夹则递归
            batch_update_filename(p)
        else:
            #获取文件名
            f_split=os.path.split(p)
            old_name=f_split[-1]
            new_name=old_name+append_name
            shutil.move(p,os.path.join(f_split[0],new_name))

if __name__ == '__main__':
    batch_update_filename("D:/PycharmProjects/file_demo/file_demo/demo1","qqxxxxx")
相关推荐
湫ccc5 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe6 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin6 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python
哭泣的眼泪4086 小时前
解析粗糙度仪在工业制造及材料科学和建筑工程领域的重要性
python·算法·django·virtualenv·pygame
湫ccc7 小时前
《Python基础》之基本数据类型
开发语言·python
吃肉不能购7 小时前
Label-studio-ml-backend 和YOLOV8 YOLO11自动化标注,目标检测,实例分割,图像分类,关键点估计,视频跟踪
运维·yolo·自动化
drebander8 小时前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
威威猫的栗子8 小时前
Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画
开发语言·python
墨染风华不染尘9 小时前
python之开发笔记
开发语言·笔记·python
Dxy12393102169 小时前
python bmp图片转jpg
python