Python脚本实现按日期自动归档Windows文件

Dylan
Dylan
发布时间:2026-10-14| 6人浏览过
原创

本文介绍如何使用Python脚本自动将指定目录下的文件按日期归档。通过结合Windows计划任务,每天定时执行脚本,将昨日文件移动至以日期命名的文件夹中。文章详细解析了获取日期、创建目录、移动文件及清理原文件等核心函数的实现逻辑,并特别说明了处理周一归档周末文件及避免修改文件生成时间的注意事项。

在日常工作场景中,data目录会持续接收各类文件。若将所有文件集中存放于一个大目录中,不仅难以排查是否有漏收的文件,还会导致检索效率低下。

为此,编写了一个自动化脚本,并通过Windows计划任务设置为每天上午九点执行。该脚本负责将前一天接收到的文件全部归档,归档文件夹的名称即为前一天的日期。以下是脚本代码及其详细解释:


import os
import datetime
import shutil
 
# get file name
def get_datetime(i):
    d = str((datetime.datetime.now() - datetime.timedelta(days=i)).date()).split("-")
    timeoffile = d[0] + d[1] + d[2]
    return(timeoffile)
 
# new file
def get_newfile(i):
    filename = get_datetime(i)
    aimPath = 'C:\\data\\' + filename
    isExists=os.path.exists(aimPath)
    if not isExists:
        os.makedirs(aimPath)
        print(aimPath + 'ok!')
        return aimPath
    else:
        print(aimPath + 'file is exists!')
        return False
 
 
def delete_flie(filePath):
    for i,j,k in os.walk(filePath):
        n = 0
        while n < len(k):
            fileneed = filePath + '\\' + k[n]
            if(os.path.exists(fileneed)):
                os.remove(fileneed)
            else:
                pass
            n = n + 1
     
# get file name and move
def get_filename(filePath):
    for i,j,k in os.walk(filePath):
        n = 0
        while n < len(k):
            fileneed = filePath + '\\' + k[n]
            if(os.path.exists(fileneed)):
                shutil.move(fileneed,aimPath)
            else:
                pass   
            n = n + 1
 
# Monday special
def is_Monday():
    if datetime.datetime.now().weekday() == 0:
        return 3
    else:
        return 1
 
filePath = 'C:\\data'
pos = is_Monday()
aimPath = get_newfile(pos)
get_filename(filePath)
delete_flie(filePath)

1. get_newfile函数

该函数调用get_datetime函数,获取指定日期的时间戳,并将其格式化为YYYYMMDD的形式进行拼接。

接着使用isExists检查目标文件夹是否存在。如果该文件夹尚未创建,则自动新建该文件夹。

2. delete_flie函数

在文件移动操作完成后,此函数负责删除原目录中的源文件。

在执行删除操作前,必须使用os.path.exists验证待删除文件是否真实存在,以避免报错。

3. get_filename函数

该函数用于获取data文件夹内的所有文件名,并将它们移动到新创建的归档文件夹中。

在移动文件之前,同样需要使用os.path.exists验证待移动文件是否存在,确保操作安全。

4. is_Monday函数

当遇到周一时,需要将周五、周六和周日的文件统一归档到以周五日期命名的文件夹中。因此,使用此函数来判断当前是星期几。

datetime.datetime.now().weekday()函数返回0到6之间的整数,分别代表周一到周日。因此,当值为0(即周一)时,该函数返回3(代表往前推3天,即周五)。

该函数的返回值将传递给get_newfile函数,进而调用get_datetime函数。通过控制参数i的值,可以精确生成所需的日期时间:

d = str((datetime.datetime.now() - datetime.timedelta(days=i)).date()).split("-")

注意:shutil.copy函数会改变文件的生成时间,这不利于后续对文件时间的判断。因此,脚本中使用shutil.move来移动文件,以保持原始时间属性。

以上便是使用Python实现按日期自动归档文件的完整内容。如需了解更多关于Python文件归档的资料,请查阅本站其他相关文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。