2

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

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

谢谢

4

5 回答 5

1

您想要的列表也可以使用 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
于 2012-07-31T04:52:36.057 回答
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

编辑:

随着 OPs 的问题变得更加清晰,很明显不仅需要列表的最后一个文件,而且每天的最新文件 - 为了实现这一点,我包括了一个“同一天”有条件的取消链接。

于 2012-07-31T03:03:34.810 回答
0

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

import os

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

幸运的是,您的文件名使用 ISO8601 日期格式,因此文本排序无需解析日期即可达到预期结果。

于 2012-07-31T03:03:44.507 回答
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)
于 2012-07-31T03:36:53.337 回答
-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")
于 2012-07-31T03:01:46.440 回答