-1

我有一个文件列表(实际上这些是某个目录中的文件),例如

import os
path  = '/home/user/folder'
files = os.listdir(path)

所以结果如下

files = ['backup_file_2010-06-30_category.zip','backup_file_2010-06-28_category.zip',
         'backup_file_2010-06-26_category.zip','backup_file_2010-06-24_category.zip',
         'backup_file_2010-06-23_category.zip','backup_file_2010-06-20_category.zip'
         'some_text_files_one.txt','some_text_files_two.txt']

所以从这个列表中我需要删除包含日期的zip文件,条件是, the files that are created before five days from today needs to be deleted

我的意思是如果今天创建的文件是backup_file_2013-04-17_category.zip,我们需要删除从今天起五天之前创建的文件,例如名为的文件backup_file_2013-04-11_category.zip

谁能告诉我如何在python中做到这一点

4

3 回答 3

1

你可以做类似的事情,在filtered_files列表中你有需要删除的文件列表。如果您的备份文件以prefix.

from datetime import datetime
from datetime import timedelta
import os

path  = '/home/user/folder'
files = os.listdir(path)

prefix = 'backup_file_'
days = 5

filtered_files = []
five_days_ago = datetime.now() - timedelta(days=days)
date_before = '%s%s' % (prefix, five_days_ago.strftime('%Y-%m-%d'))
for f in files:
  if f.startswith(prefix) and f < date_before:
    filtered_files.append(f)

print filtered_files
于 2013-04-17T10:24:22.313 回答
0

您可以使用正则表达式从每个文件名中提取日期,并对其进行比较以查看备份文件是否确实旧。如果正则表达式不匹配,则它不是备份文件。

from datetime import date
import re

OLD_FILE_DAYS = 5

def is_old_backup_file(filename, today):
    m = re.match('backup_file_(\d\d\d\d)-(\d\d)-(\d\d)_category.zip', filename)
    if not m:
        return False
    year, month, day = (int(s) for s in m.groups())
    d = date(year, month, day)
    delta = today - d
    return delta.days > OLD_FILE_DAYS

files = ['backup_file_2010-06-30_category.zip','backup_file_2010-06-28_category.zip',
         'backup_file_2010-06-26_category.zip','backup_file_2010-06-24_category.zip',
         'backup_file_2010-06-23_category.zip','backup_file_2010-06-20_category.zip',
         'some_text_files_one.txt','some_text_files_two.txt'] # os.listdir(path)

today = date(2010, 7, 1) # date.today()

filtered_files = [f for f in files if not is_old_backup_file(f, today)]

print filtered_files

输出:

['backup_file_2010-06-30_category.zip', 'backup_file_2010-06-28_category.zip',
'backup_file_2010-06-26_category.zip', 'some_text_files_one.txt',
'some_text_files_two.txt']
于 2013-04-17T10:42:51.257 回答
0
import datetime, os
mydaterange=[datetime.datetime.today()-datetime.timedelta(days=x) for x in range(1,6)]
myfilenames=['backup_file_'+ str(x.year)+'-'+ str(x.month) + '-' + str(x.day)+ '_category.zip' for x in mydaterange]
for files in os.listdir('/home/user/folder'):
    if files.endswith('.zip') and files.startswith('backup_file_'):
        if files not in myfilenames:
            os.remove(files)
于 2013-04-17T10:30:57.780 回答