2

私のフォルダには、最後に示したような日付とタイムスタンプ形式の 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

ありがとう

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

次のスニペットは、指定されたテスト ケースで動作します。

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 に答える
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の質問がより明確になるにつれて、リストの最後のファイルだけでなく、毎日の最新のファイルが必要であることが明らかになりました-これを達成するために、「同日」の条件付きリンク解除を含めました.

于 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 に答える
-1

ディクショナリの使用 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 に答える