当前位置: 首页 > news >正文

Python桌面文件清理脚本

需求

桌面临时文件较多时,直接删了不太放心,不删又显得很杂乱,故需要写一个脚本批量清理并备份这些鸡肋的文件。

所以脚本需要具有以下功能:

1. 可以将桌面文件移动至指定文件夹(可配置)。

2. 可以设置例外文件,比如桌面图标不需要移动,部分常用的文件也不需要移动。

3. 出现同名文件时,不能直接覆盖,需要加一个日期后缀予以区分。例如更名为 helloworld-2022-08-30.txt

本来准备按照文件后缀名分文件夹存放的,但毕竟是临时文件,大概率还是需要定期删除的,分类后反而不利于检索。

实现

目录结构

两个配置文件,一个主类。

代码

ignore.ini配置需要忽略的文件名或者后缀名。

比如需要忽略图标,可以加上.lnk;需要配置忽略文件夹temp,则在尾行加上temp即可;

 location.ini配置需要备份至哪个目录

main.py主类

import os
import datetime
import shutil


def get_config(file_name):
    """
    读取配置文件
    :param file_name: 文件名
    :return: 按行读取
    """
    f = open(file_name)
    lines = []
    for line in f.readlines():
        line = line.strip('\n')
        lines.append(line)
    return lines


def get_desktop():
    """
    获取桌面路径
    :return: 桌面绝对路径
    """
    return os.path.join(os.path.expanduser("~"), 'Desktop')


def get_suffix(dir_path):
    """
    获取文件的后缀名
    :param dir_path: 文件名
    :return: 后缀名
    """
    return os.path.splitext(dir_path)[-1]


def get_exclude_suffix():
    """
    获取不参与整理的文件后缀名
    """
    dirs = {}
    lines = get_config('ignore.ini')
    for line in lines:
        dirs.setdefault(line, 0)
    return dirs


def get_target_path():
    """
    备份至指定文件夹
    :return: 目标位置的路径
    """
    return get_config('location.ini')[0]


def get_source_dirs():
    """
    获取需要转移的文件
    :return: 文件目录
    """
    dirs = os.listdir(get_desktop())
    suffixes = get_exclude_suffix()
    fit_dirs = []
    for dir in dirs:
        suffix = get_suffix(dir)
        if suffix not in suffixes and dir not in suffixes:
            fit_dirs.append(dir)
    return fit_dirs


def get_time():
    """
    获取当前年月日
    :return: 时间
    """
    return datetime.datetime.now().strftime('-%Y-%m-%d')


def get_rename(path):
    """
    文件重命名
    :param path: 路径
    :return: 命名后的路径
    """
    if os.path.isdir(path):
        return path + get_time()
    else:
        return os.path.splitext(path)[0] + get_time() + get_suffix(path)


def move():
    """
    移动文件
    """
    dirs = get_source_dirs()
    target_base_path = get_target_path()
    desk_url = get_desktop()
    if not os.path.exists(target_base_path):
        os.makedirs(target_base_path)

    for dir in dirs:
        path = os.path.join(desk_url, dir)
        target_path = os.path.join(target_base_path, dir)
        if os.path.exists(target_path):
            # 如果有同名文件,则加一个日期后缀
            target_path = get_rename(target_path)
        shutil.move(path, target_path)


if __name__ == '__main__':
    move()

 直接  python main.py 执行脚本即可

 

相关文章:

  • STM32开发板在RT-Thread中使用segger_rtt软件包
  • SpringBoot异常处理机制之自定义404、500错误提示页面
  • Debezium系列之:深入理解Debezium是如何处理bigint unsigned类型的字段
  • MySQL基础篇【第四篇】| 连接查询、子查询(嵌套)
  • 【Linux】如何实现虚拟机系统与本地系统的通信连接
  • MyBatis 操作数据库
  • Linux权限
  • 【深度学习】6-卷积过程中数据的结构变化
  • 牛客刷SQL
  • 如何高效的实现大型设备中卫星信号的传输和分配?
  • C语言描述数据结构 —— 二叉树(3)普通二叉树
  • Nginx rewrite
  • 【基于Arduino的垃圾分类装置开发教程一】
  • Synchronized 与 Lock 卖票问题、区别
  • 多疑型性格的危害,如何改变多疑型性格?
  • $translatePartialLoader加载失败及解决方式
  • bearychat的java client
  • JSONP原理
  • October CMS - 快速入门 9 Images And Galleries
  • storm drpc实例
  • 安装python包到指定虚拟环境
  • 不用申请服务号就可以开发微信支付/支付宝/QQ钱包支付!附:直接可用的代码+demo...
  • 关于Java中分层中遇到的一些问题
  • 简析gRPC client 连接管理
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 前端存储 - localStorage
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 小李飞刀:SQL题目刷起来!
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • !$boo在php中什么意思,php前戏
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.proxy和$.extend
  • %check_box% in rails :coditions={:has_many , :through}
  • (a /b)*c的值
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (接口封装)
  • (十) 初识 Docker file
  • (四)Controller接口控制器详解(三)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (正则)提取页面里的img标签
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿