Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中将类似文件名的文件组合在一起?_Python_Regex_Python 2.7_Formatting_String Formatting - Fatal编程技术网

如何在python中将类似文件名的文件组合在一起?

如何在python中将类似文件名的文件组合在一起?,python,regex,python-2.7,formatting,string-formatting,Python,Regex,Python 2.7,Formatting,String Formatting,假设我有一个包含以下项目的文件夹: 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每次都会变化。有人能帮我吗 我能够得到程序当前运行的当前工作目录,我想不出一个逻辑,如果它们是通用的,而且大

假设我有一个包含以下项目的文件夹: 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位或更多数字开始(regex
“\d{4,}”
匹配4位或更多数字),然后提取所有数字。然后使用将连续的数字分组在一起,创建结果列表,然后打印它

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

所有数字的长度都是4或更多,比如1001等等@NirmalKumarYes@DeveshKumarSingh。大多数情况下都是4。嘿@DeveshKumarSingh这里我们硬编码'df_ak01',这不是每种情况下都是这样的,可能会因目录而异。你知道我们如何解决这个问题吗?只要定义一个目录字典,根据你想要的值,而不是
df_ak01
@DeveshKumarSingh,我不明白!你能解释一下吗