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

2024-10-03 06:25:44 发布

您现在位置: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个字符,如果它与第二个匹配,然后比较文件1和文件2。如果值为false,则附加到列表并最终删除它。你知道吗

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

丢失了如何保留第一个文件的值并继续检查。你知道吗


Tags: 文件import目录falsesource列表pyhtonos
3条回答

对不起,我不能说。你知道吗

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

编辑:对不起,我错过了关于保留其中一些的部分!你知道吗

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)

下面应该会给出您想要的最终结果。你知道吗

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

创建date:latest\u version\u file\u name的映射(latest_files),然后删除除映射中的文件以外的所有文件。你知道吗

相关问题 更多 >