如何在 python 中将相似文件名的文件合并在一起?

How to combine files of similar file names together in python?

假设我有一个包含以下项目的文件夹: default.xml df_ak01.1001.jpg df_ak01.1002.jpg df_ak01.1003.jpg df_ak01.1005.jpg df_ak01.1006.jpg

(这里我们可以看到 df_ak01.1004.jpg 丢失了,如果目录中有数千个文件,很难发现) 该程序应该能够 运行 在任何目录和文件名部分 (此处)df_ak01 每次都可能不同。谁能帮我解决这个问题。

我能够获取程序当前所在的当前工作目录 运行 ,而且我想不出一个逻辑,如果它们是通用的并且大部分是未知的,我该如何归档名称部分。

我刚刚创建了一个正则表达式来搜索名称中带有 df_ak01 的文件并列出它们(但这不是一个好方法)。但是我如何实现查找丢失的图像仍然没有成功。

import os
import re

current = os.getcwd()

#I've just implemented the listing of files that match 'df_ak01'
a = [x for x in os.listdir(current) if re.match('df_ak01.*.jpg',x)]
print a

所以我想得到类似这样的输出:

1 default.xml
3 df_ak01.%04d.jpg   1001-1003
2 df_ak01.%04d.jpg   1005-1006

您可以进行如下操作。从匹配 4 位或更多数字的数字开始,(正则表达式 "\d{4,}" 匹配 4 位或更多数字)并提取所有数字。然后使用 more_itertools.consecutive_groups 将连续的数字组合在一起,并创建结果列表,然后打印它

import re
import os
from more_itertools import consecutive_groups
files = ["default.xml", "df_ak01.1001.jpg", "df_ak01.1002.jpg", "df_ak01.1003.jpg", "df_ak01.1005.jpg", "df_ak01.1006.jpg"]

#Pattern to match numbers with 4 or more digits
pattern = re.compile("\d{4,}")

#Extract all numbers
a = [int(pattern.search(x).group(0)) for x in files if pattern.search(x)]
#[1001, 1002, 1003, 1005, 1006]

#Group consecutive numbers together
cons_groups = [list(group) for group in consecutive_groups(a)]
#[[1001, 1002, 1003], [1005, 1006]]

#Create result list
result = [ [len(x), '{}-{}'.format(x[0], x[-1])] for x in cons_groups]
#[[3, '1001-1003'], [2, '1005-1006']]

#Print the result list
for item in result:
    print('{} df_ak01.%04d.jpg {}'.format(item[0], item[1]))

输出将是

3 df_ak01.%04d.jpg 1001-1003
2 df_ak01.%04d.jpg 1005-1006