根据文件名版本从目录中删除文件

时间:2019-09-18 20:31:06

标签: python

我想根据无法考虑创建日期的文件名从目录中删除旧的ZIP文件

例如

PyhtonReport_20180404_03.zip
PyhtonReport_20180404_02.zip
PyhtonReport_20180404_01.zip
PyhtonReport_20181221_02.zip
PyhtonReport_20181221_01.zip
PyhtonReport_20180816_01.zip

最终结果:

PyhtonReport_20180404_03.zip
PyhtonReport_20181221_02.zip
PyhtonReport_20180816_01.zip

我试图读取前23个字符,如果与第二个字符匹配,则将file1与file2比较。如果该值为false,则追加到列表并最终将其删除。

import os
source = r'C:\Users\Pyhton'
for filename in os.listdir(source):
    GroupFile = filename[0:22]

丢失了如何保留第一个文件的值并继续检查的方法。

3 个答案:

答案 0 :(得分:1)

以下内容将为您提供所需的最终结果。

import os

source = r"C:\Users\Pyhton"    
file_names = os.listdir(source)

latest_files = {}
for file_name in file_names:
    name_parts = file_name.split("_")
    date_stamp = name_parts[1]

    if date_stamp not in latest_files or file_name > latest_files[date_stamp]:
        latest_files[date_stamp] = file_name


keep_files = latest_files.values()
for file_name in file_names:
    if file_name in keep_files:
        continue

    os.remove(os.path.join(source, file_name))

创建一个日期为{latest_version_file_name的映射(latest_files),然后除去该映射中的所有文件。

答案 1 :(得分:0)

编辑:对不起,我错过了保留其中一些的部分!

import glob
import os
files = glob.glob('path/to/old/files/common_part_of_files_names*.zip')
groups = set([f[:21] for f in files])
for group in groups:
  versions = [f for f in files if f.starts_with(group)]
  versions.remove(max(versions)) # pop latest
  for v in versions:
    os.remove(v)

答案 2 :(得分:0)

对不起,我不能陪伴。

var texts = doc.DocumentNode
    .SelectNodes("//a[@href]")
    .Select(n => n.InnerText)
    .Distinct()
    .ToList();

及其用法

def distinct_dates(files):
    "Remove duplicates of same date files, preserving the first ocurrence"
    o = {}  # Saves first occurrence as {date: file}
    for i, date in enumerate(map(lambda f: f[13:21], files)):
        if date not in o:
            o[date] = files[i]
    return list(o.values())