第九天-自动化办公

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")
相关推荐
傻啦嘿哟8 小时前
某短视频平台视频爬虫实战:抓取推荐流视频信息,绕过反爬的3种技巧
开发语言·爬虫·python
独隅8 小时前
Cursor+GitOps 自动化运维实战:智能编写 Ansible 与 Terraform
运维·自动化·ansible
迷迭香yy9 小时前
集合竞价数据挖掘实战:用Python构建开盘信号识别系统
人工智能·python·数据挖掘
YFJ_mily10 小时前
【IEEE征稿】第二届智能制造、机器人与自动化国际学术会议(IMRA 2026)| 马鞍山12月举办,EI/Scopus稳定检索,3-5工作日录用
机器人·自动化·智能制造·工业自动化·ieee会议·rdlink研发家·安徽马鞍山会议
李昊哲小课11 小时前
fastapi sse websocket 奶茶店实时订单看板
人工智能·python·websocket·网络协议·fastapi·sse
nbzy88812 小时前
电器铝锌压铸配件资料检索报错排查:倒排索引与结构化过滤的组合实现
自动化·内容生成·电器铝锌压铸配件
回眸&啤酒鸭13 小时前
【回眸】搞钱灵感——自动化敏捷开发项目管理系统落地设计
运维·自动化·敏捷流程
2401_8445829513 小时前
工具包:软件架构设计的实用技巧与经验分享
python
RFID固定资产管理系统13 小时前
适配媒体行业的固定资产管理软件有哪些功能与核心优势
大数据·人工智能·python·媒体
SunnyDays101114 小时前
Python 为 PowerPoint 添加动画:进入、退出、动作路径与文本动画(详解)
python·powerpoint·动画·动画效果·文本动画