我将使用datetime
库创建一个被视为“有效”的日期列表。有效日期是
a)工作日
b)不到14个工作日。
日期格式为20140917 - %Y%m%d
然后我打算迭代一个文件列表,如果文件名(格式相同)不在此列表中,则删除该文件。
但是我知道从你正在迭代的列表中删除任何东西都是不好的。
我怎么会这样做,因为我必须遍历文件列表,我的纯粹意图是删除其中的一些。
作为旁注,我也在努力创建有效日期列表。
我目前在我编写的前一个脚本中有这个片段,但我无法弄清楚如何使用它来创建“有效”日期列表。
for (day,name) in itertools.izip((day for day in (datetime.today()+timedelta(n) for n in xrange(20)) if day.weekday() not in (5,6)), (itertools.cycle(names))):
答案 0 :(得分:2)
如果我理解你的问题你有一个包含很多日期的清单。 从此列表中,您希望过滤所有超过14天且不是工作日的日期。
使用设置和& 命令可以实现这一目标:
list_of_dates = ['0000000', '20140930', '11111111', '20140926', '20140925', '33333333']
# Create valid dates
now = datetime.now()
valid_days = [(now - timedelta(days=i)).strftime('%Y%m%d') for i in range(-14, 0) if (now-timedelta(days=i)).weekday() not in (5,6)]
# filter list
filtered = list(set(list_of_dates) & set(valid_days))
这导致列表:
'20140926', '20140930', '20140925'
答案 1 :(得分:1)
我认为这里可能会有些混乱,乔。
如果要遍历文件名字符串列表,是的,从列表中删除字符串是不好的。但是从硬盘驱动器中删除指定文件是完全完全安全的。实际上,假设(当然)列表确实包含您可能想要删除的文件。 :)
答案 2 :(得分:0)
要从正在迭代的列表中删除内容,您可以使用此结构执行某些操作:
list_of_files[:] = [file for file in list if not in dates_list]
为了使代码更具可读性并添加额外的检查,您可以通过函数调用来清除not in dates_list
:
def file_check(file, dates_list):
if conditionyoulike:
return true
else:
return false
list_of_files[:] = [file for file in list if file_check(file,dates_list)]