分组和删除文件

x41

我必须想出一个解决方案,以删除我们自己的目录结构中除最新文件外的所有文件(除最新文件外的2个文件)。确切地说-其文件版本控制文件夹。一个文件夹中的文件具有以下结构:

Filename.Ext.v[random_Number]

困难的部分是我需要保留一个文件夹中的不同文件。

IE:文件夹A的内容:

  • HelloWorld.txt.v123
  • HelloWorld.txt.v555
  • HelloWorld.txt.v666
  • OtherFile.pdf.v143
  • OtherFile.pdf.v1453
  • OtherFile.pdf.v123
  • OtherFile.pdf.v14345
  • YetOtherFile.docx.v11113

在这种情况下,我们有3个“基本文件”。而且我必须保留每个“基本文件”中最新的2个文件。

我尝试使用os.walkregex过滤Python3的基本名称。我尝试在Linux工具中进行构建,例如findwith -ctime我也可以使用bash。

但是我真正的问题更多是逻辑。您将如何处理此任务?

编辑2:这是我的进度:

import os
from itertools import groupby
directory = 'C:\\Users\\x41\\Desktop\\Test\\'


def sorted_ls(directory):
    mtime = lambda f: os.stat(os.path.join(directory, f)).st_mtime
    return list(sorted(os.listdir(directory), key=mtime))

print(sorted_ls(directory))

for basename, group in groupby(sorted_ls(directory), lambda x: x.rsplit('.')[0]):
    for i in basename:
            finallist = []
            for a in group:
                finallist.append(a)
            print(finallist[:-2])

我快到了 该函数根据该mtime对目录中的文件进行排序建议的groupby()函数调用我的自定义排序函数。

现在的问题是,我必须在sort()之前转储groupby()因为这会重置我的自定义排序。但是现在它还返回了比预期更多的组。

如果我的排序列表如下所示:

['A.txt.1', 'B.txt.2', 'B.txt.1', 'B.txt.3', 'A.txt.2']

我会得到3组。再次是A,B和A。有什么建议么?

最后结果

这是我具有递归性的最终版本:

import os
from itertools import groupby

directory = r'C:\Users\x41\Desktop\Test'

for dirpath, dirs, files in os.walk(directory):
    output = []
    for basename, group in groupby(sorted(files), lambda x: x.rsplit('.')[0]):
        output.extend(sorted(group, key=lambda x: os.stat(os.path.join(dirpath, x)).st_mtime)[:-2])

        for file in output:
            os.remove(dirpath + "\\" + file)
马丁·埃文斯(Martin Evans)

您首先需要对文件名进行简单排序,以使它们按字母顺序排列以使groupby功能正常工作。

对于每个结果文件组,然后可以使用os.stat密钥进行如下排序

import os
from itertools import groupby

directory = r'C:\Users\x41\Desktop\Test'
output = []

for basename, group in groupby(sorted(os.listdir(directory)), lambda x: x.rsplit('.')[0]):
    output.extend(sorted(group, key=lambda x: os.stat(os.path.join(directory, x)).st_mtime)[-2:])

print output

这将产生一个包含每个组中最新的两个文件的列表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何返回和删除文件?

来自分类Dev

使用find和grep删除文件列表

来自分类Dev

FTP获取和删除多个文件

来自分类Dev

使用sed从csv文件中删除“ [和]”

来自分类Dev

导入和删除SAS中的原始文件

来自分类Dev

使用bash和awk将日志文件分组

来自分类Dev

从XML文件中删除和读取

来自分类Dev

删除和重命名有问题的文件

来自分类Dev

从WordPress删除.po和.mo文件?

来自分类Dev

Gulp监视文件的添加和删除

来自分类Dev

从SilverStripe UploadField删除“编辑”和“从文件删除”

来自分类Dev

如何删除孤立的文件和残留

来自分类Dev

根据条件分组和删除行

来自分类Dev

搜索和删除Markdown文件中的链接

来自分类Dev

使用MulterGoogleStorage和NestJS删除文件

来自分类Dev

分组和删除列表中的重复数据

来自分类Dev

如何删除孤立的文件和残留

来自分类Dev

优化的列出和删除文件的方式

来自分类Dev

从日志文件中删除BS和ESC

来自分类Dev

使用find和grep删除文件列表

来自分类Dev

使用minizip删除和修改zip文件

来自分类Dev

拆分和删除文件?

来自分类Dev

使用bash和awk将日志文件分组

来自分类Dev

用ls分组隐藏文件和目录

来自分类Dev

收集和分组日志文件中的错误

来自分类Dev

如何根据文本文件的内容移动和分组?

来自分类Dev

JavaScript编号数据分组和异常值删除

来自分类Dev

在python中从列表中分组和删除重复元素

来自分类Dev

Grep 和删除文件