繁体   English   中英

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

[英]Delete Files from directory based on file name version

我想根据文件名从目录中删除旧的 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,则 append 列出并最终删除它。

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

失去了如何保持第一个文件的价值并继续检查。

以下应该会给你想要的最终结果。

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_files ): latest_version_file_name 然后删除除映射中的文件之外的所有文件。

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

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)

对不起,我无法抗拒。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM