删除列表中指定的某些文件

时间:2014-09-17 08:27:58

标签: python list iteration

我将使用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))):

3 个答案:

答案 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)]