Python方式删除文件/文件夹早于X天

ezykj2lf  于 2023-02-26  发布在  Python
关注(0)|答案(2)|浏览(121)

在我的Python3程序中,我需要删除超过X天的文件和文件夹。我知道这里有很多类似的问题,但在我的例子中,我不需要检查这些文件和文件夹的修改时间。相反,我有以下文件夹结构:

/root_folder/<year>/<month>/<day>/<files>

比如像这样的事情:

.
└── 2020
    ├── 04
    │   └── 30
    │       ├── file.1
    │       └── file.2
    └── 05
        ├── 14
        │   ├── file.1
        │   └── file.2
        ├── 19
        ├── 21
        │   └── file.1
        └── 22
            ├── file.1
            ├── file.2
            └── file.3

现在我想要删除所有的文件夹和它们的文件,代表的日期早于X天。我已经创建了一个解决方案,但来自Java似乎对我来说,这不是很Python,或者它可能更容易在Pyhton解决。你PythonMaven可以指导我一点在这里,当然要考虑到“跳跃”在几个月和几年?

wydwbb8l

wydwbb8l1#

我也不是PythonMaven,但我有个简单的建议:
1.找到要保留的最早日期。任何早于此日期的内容都将被删除。假设日期为2020年4月28日
1.从该日期开始,您可以构建字符串"/root_folder/2020/04/28 "
1.列出所有文件,如果它们的路径(字符串形式)小于上一步中的字符串,则可以将它们全部删除
示例:

files = []
# r=root, d=directories, f = files
for r, d, f in os.walk(path):
    for file in f:
        if '.txt' in file:
            files.append(os.path.join(r, file))

该片段的来源:https://mkyong.com/python/python-how-to-list-all-files-in-a-directory/
现在,您可以执行以下操作:

for f in files:
    if f < date_limit:
        os.remove(f)

注意:这不是最佳选择
1.它一个文件一个文件地删除,但是当你进入的时候,如果你可以只删除这个文件所在的整个文件夹(但是然后文件列表指向已经删除的文件)。
1.你实际上并不关心文件,你可以把逻辑应用到文件夹上,然后递归地删除它们。
更新:在浏览文件夹时执行以下两个步骤:

for r, d, f in os.walk(path):
    if( r < date_limit ):
        print(f"Deleting {r}")
        shutil.rmtree(r)
aiazj4mn

aiazj4mn2#

Glob你的路径以数组形式得到你的文件路径,然后像这样运行它(如下),祝你好运!

def is_file_access_older_than(file_path, seconds, from_time=None):
    """based on st_atime --> https://docs.python.org/3/library/os.html#os.stat_result.st_atime"""
    if not from_time:
        from_time = time.time()
    if (from_time - os.stat(file_path).st_atime) > seconds:
        return file_path
    return False

相关问题