保留最新文件并删除所有其他文件

时间:2012-07-31 02:55:32

标签: python

在我的文件夹中有许多pdf文件,其日期时间戳格式如上所示。 我想保留当天的最新文件,并删除当天的其余文件。我怎么能用Python做什么?

2012-07-13-15-13-27_1342167207.pdf
2012-07-13-15-18-22_1342167502.pdf
2012-07-13-15-18-33_1342167513.pdf
2012-07-23-14-45-12_1343029512.pdf
2012-07-23-14-56-48_1343030208.pdf
2012-07-23-16-03-45_1343034225.pdf
2012-07-23-16-04-23_1343034263.pdf
2012-07-26-07-27-19_1343262439.pdf
2012-07-26-07-33-27_1343262807.pdf
2012-07-26-07-51-59_1343263919.pdf
2012-07-26-22-38-30_1343317110.pdf
2012-07-26-22-38-54_1343317134.pdf
2012-07-27-10-43-27_1343360607.pdf
2012-07-27-10-58-40_1343361520.pdf
2012-07-27-11-03-19_1343361799.pdf
2012-07-27-11-04-14_1343361854.pdf

我应该使用列表来填充和整理吗?期望的输出是:

2012-07-13-15-18-33_1342167513.pdf
2012-07-23-16-04-23_1343034263.pdf
2012-07-26-22-38-54_1343317134.pdf
2012-07-27-11-04-14_1343361854.pdf

由于

5 个答案:

答案 0 :(得分:0)

如果列表中的下一个文件是在同一天,则对列表进行排序并删除文件,

import glob
import os
files = glob.glob("*.pdf")
files.sort()

for ifl, fl in enumerate(files[:-1]):
    if files[ifl+1].startswith(fl[:10]):    #Check if next file is same day
        os.unlink(fl)                       # It is - delete current file

修改

随着OP的问题越来越明显,很明显不仅需要列表的最后一个文件,而且每天的最新文件 - 为了达到这个目的,我将“同一天”包含在条件中取消链接。

答案 1 :(得分:0)

你可以这样做。以下代码未经测试,但可能有效:

import os

names = os.listdir()
names.sort()
for f in names[:-1]:
    os.unlink(f)

幸运的是,您的文件名使用ISO8601日期格式,因此文本排序可以实现所需的结果,而无需解析日期。

答案 2 :(得分:0)

以下代码段适用于给出的测试用例。

files = os.listdir(".")
days = set(fname[8:10] for fname in files)

for d in days:
    f = [i for i in files if i[8:10] == d]
    for x in sorted(f)[:-1]:
        os.remove(x)

答案 3 :(得分:0)

您也可以使用groupby实现所需的列表。

from itertools import groupby
from os import listdir,unlink

filtered_list = list()
names = os.listdir()

for key,group in groupby(names,lambda x : x[:10]): # groups based on the start 10 characters of file
  filtered_list.append([item for item in group][-1]) #picks the last file from the group

print filtered_list

答案 4 :(得分:-1)

使用字典您可以保留一个值。这可能是肮脏和最快的解决方案,也许不是最好的。

#!/usr/bin/env python
import os
import datetime
import stat
import shutil

filelist=[]
lst=[]
dc={}

os.chdir(".")
for files in os.listdir("."):
    if files.endswith(".pdf"):
        lst.append(files)

for x in lst:
    print x[0:10].replace("-","")
    dc[int(x[0:10].replace("-",""))]=x

a = dc.items()
flist=[]
for k, v in a:
    flist.append(v)

dir="tmpdir"    
if not os.path.exists(dir):
    os.makedirs(dir)

from shutil import copyfile
for x in flist:
    print x
    copyfile(x, dir + "/" + x)

#os.chdir(".")
for files in os.listdir("."):
    if files.endswith(".pdf"):
            os.unlink(files)

os.chdir("./tmpdir")
for files in os.listdir("."):
    if files.endswith(".pdf"):
        copyfile(files, "../"+files)

os.chdir("../")
shutil.rmtree(os.path.abspath(".")+"/tmpdir")