我想根据无法删除创建日期的文件名从目录中删除旧的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]

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

#1楼 票数: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 ),然后除去该映射中的所有文件。

#2楼 票数: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)

#3楼 票数:0

抱歉,我不能陪伴。

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())

及其用法

files = [
    "PyhtonReport_20180404_03.zip",
    "PyhtonReport_20180404_02.zip",
    "PyhtonReport_20180404_01.zip",
    "PyhtonReport_20181221_02.zip",
    "PyhtonReport_20181221_01.zip",
    "PyhtonReport_20180816_01.zip",
]

print(distinct_dates(files))

  ask by Uday translate from so

未解决问题?本站智能推荐:

1回复

在各个子目录中删除相同的文件名

python有没有办法进入文件夹的子目录和第二子目录并删除某个文件? 我有1个目录,在该目录中还有20个其他子目录,并且每个子目录都有自己的子目录,并且要删除某个文件。 我知道我可以对每个路径进行硬编码,但是有没有更简单的方法? 编辑:我想要它,所以可以说我有"C:\\Stackover
1回复

如何一一获取目录中的文件名?

我的目录中有超过100k个文件。 我需要遍历它们并执行操作。 我不想将整个文件列表加载到内存中,而是想同步遍历。 用Python实现这一目标的最佳方法是什么?
5回复

从目录中读取文件名

我想使用glob获得两个单独的文件名列表,每个列表具有相同类型的文件。 我有两种类型的数据文件。 例如, 2018-01-02.dat 2018-01-02_patients.dat 唯一的区别是第二个文件类型后跟“_patients”。 日期可以是任何格式,但格式是一致的
1回复

如何根据模式列出目录中的文件名

这个问题已经在这里有了答案: 获取目录中文件的过滤列表 12个答案 我有一个查找文件( file1.txt ),其中包含要搜索的模式列表。 文件1.txt的内容 我必须根据file1.txt中的模式列出特定目录中的文件例如:如果特定目录中包含以下文件 我只需要显示与
1回复

如何打印目录中的文件名?

如何使用python打印目录中的所有文件名? 为什么这不起作用?
4回复

比较目录中的文件名

我需要比较两个目录A和B的文件名。 与相同的名称/不同的内容相比,A包含的文件多于B(分别约为15000/20000)。 我有: dirA: 'doctor_Weiss.csv', 'doctor_Urlici.csv', 'doctor_Basler J. Rudolph.csv'
3回复

将目录中的文件名匹配到Pandas系列,删除不匹配的文件

我使用的是Python 2.7。 我在目录中有一堆文件(主要是Outlook电子邮件)。 示例文件名: 我有一个熊猫系列 如何遍历目录,查找包含pandas系列单词的文件名,并删除找不到匹配项的文件? 在上面的示例中, RE: Pick up some cabbage pleas
1回复

从文件名以“df”开头的目录中删除所有文件[重复]

这个问题在这里已经有了答案: Python 为 os.listdir 返回的文件名提供 FileNotFoundError (2 个回答) 1 年前关闭。