AI编程与人类区别,AI不懂巧劲

Uncle K    2025-04-04     Edit 
 

问:用Python写一个定期删除备份文件的程序,文件名含有日期。要求每月2日删除上月文件名含有日期20日~31日的文件,每月12日删除文件名含有当月1日~9日的程序,每月22日删除10日~19日的程序。日期格式是YYYY-MM-DD,目录是/root/bak

豆包:

import os
import datetime


def get_current_date():
    return datetime.datetime.now()


def delete_files_with_dates(folder_path, start_date, end_date):
    for root, dirs, files in os.walk(folder_path):
        for file in files:
            for date in range(start_date, end_date + 1):
                date_str = str(date).zfill(2)
                if date_str in file:
                    file_path = os.path.join(root, file)
                    try:
                        os.remove(file_path)
                        print(f"已删除文件: {file_path}")
                    except Exception as e:
                        print(f"删除文件 {file_path} 时出错: {e}")


def main():
    folder_path = '.'  # 备份文件所在的文件夹路径,可根据实际情况修改
    current_date = get_current_date()
    current_day = current_date.day
    current_month = current_date.month
    current_year = current_date.year

    if current_day == 2:
        last_month = current_month - 1 if current_month > 1 else 12
        last_year = current_year if current_month > 1 else current_year - 1
        start_date = 20
        end_date = 31
        delete_files_with_dates(folder_path, start_date, end_date)
    elif current_day == 12:
        start_date = 1
        end_date = 9
        delete_files_with_dates(folder_path, start_date, end_date)
    elif current_day == 22:
        start_date = 10
        end_date = 19
        delete_files_with_dates(folder_path, start_date, end_date)


if __name__ == "__main__":
    main()

代码解释:

  1. get_current_date 函数:此函数用于获取当前的日期和时间。
  2. delete_files_with_dates 函数:该函数会遍历指定文件夹下的所有文件,检查文件名中是否包含指定日期范围内的日期字符串。若包含,则删除该文件。在删除过程中,若出现异常会输出错误信息。
  3. main 函数
    • 设定备份文件所在的文件夹路径,可根据实际情况进行修改。
    • 获取当前的日期、月份和年份。
    • 根据当前日期,确定需要删除的文件的日期范围,并调用 delete_files_with_dates 函数进行文件删除操作。

使用方法:

  1. 把 folder_path 变量的值修改为实际的备份文件所在的文件夹路径。
  2. 可以将该脚本设置为定时任务,例如使用 cron(在 Linux 系统中)或任务计划程序(在 Windows 系统中),让其每天运行一次。

 好家伙,主程序三个for循环,直接pass。下面看DeepSeek。

DP:省略一大段各种分析,直接贴代码。

import os
import re
from datetime import datetime, timedelta
import sys

def parse_date_from_filename(filename, date_pattern):
    """从文件名中解析日期(支持YYYY-MM-DD格式)"""
    match = date_pattern.search(filename)
    if not match:
        return None
    date_str = match.group()
    try:
        return datetime.strptime(date_str, "%Y-%m-%d").date()
    except ValueError:
        return None

def get_target_dates(today):
    """根据当前日期获取目标删除范围"""
    if today.day == 2:
        # 处理上月20号到月底
        current_month_first = today.replace(day=1)
        prev_month_last_day = current_month_first - timedelta(days=1)
        return {
            "year": prev_month_last_day.year,
            "month": prev_month_last_day.month,
            "start_day": 20,
            "end_day": prev_month_last_day.day
        }
    elif today.day == 12:
        # 处理当月1-9号
        return {
            "year": today.year,
            "month": today.month,
            "start_day": 1,
            "end_day": 9
        }
    elif today.day == 22:
        # 处理当月10-19号
        return {
            "year": today.year,
            "month": today.month,
            "start_day": 10,
            "end_day": 19
        }
    return None

def main():
    # 硬编码备份目录
    backup_dir = "/root/bak"
    
    # 检查目录是否存在
    if not os.path.isdir(backup_dir):
        print(f"错误:备份目录 {backup_dir} 不存在")
        sys.exit(1)

    today = datetime.today().date()
    target = get_target_dates(today)
    
    if not target:
        print("今天不是计划清理日期(每月2、12、22日)")
        sys.exit(0)

    date_pattern = re.compile(r"\d{4}-\d{2}-\d{2}")  # YYYY-MM-DD格式
    deleted_count = 0

    for filename in os.listdir(backup_dir):
        file_path = os.path.join(backup_dir, filename)
        if os.path.isfile(file_path):
            file_date = parse_date_from_filename(filename, date_pattern)
            if file_date:
                if (file_date.year == target["year"] and
                    file_date.month == target["month"] and
                    target["start_day"] <= file_date.day <= target["end_day"]):
                    
                    try:
                        os.remove(file_path)
                        print(f"已删除:{filename}")
                        deleted_count += 1
                    except PermissionError:
                        print(f"权限不足无法删除:{filename}")
                    except Exception as e:
                        print(f"删除失败[{filename}]: {str(e)}")

    print(f"清理完成,共删除 {deleted_count} 个文件")

if __name__ == "__main__":
    # 添加权限警告
    if os.geteuid() != 0:
        print("警告:/root 目录需要root权限,请使用sudo运行")
        sys.exit(1)
    main() 

复杂,不直观。下面是我用大白话编写的。


简单易懂。




上一篇:精制淀粉危害及建议 返回目录 下一篇:精制淀粉危害及建议


   主页   关于本站   免责声明   联系站主   投资记录   公众号