【问题标题】:How to combine files of similar file names together in python?如何在python中将相似文件名的文件组合在一起?
【发布时间】:2019-05-09 03:28:08
【问题描述】:

假设我有一个包含以下项目的文件夹: 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 或更多,例如 1001 等等@NirmalKumar
  • 是的@DeveshKumarSingh。大部分正好是 4 。
  • 嘿@DeveshKumarSingh,我们在这里硬编码'df_ak01',并非在每种情况下都是如此,并且可以在不同的目录之间改变。知道我们如何解决这个问题。
  • 只需定义一个目录字典到任何你想要的值,而不是df_ak01
  • @DeveshKumarSingh 我不明白!你能解释一下吗

标签: python regex python-2.7 formatting string-formatting


【解决方案1】:

您可以执行以下操作。从匹配 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多