我试图遍历一个列表,以便找到除最终字符之外匹配的文件名,并将匹配连接成一个字符串。
我遇到的困难是每个文件名有不同数量的匹配,因此可能有一个没有匹配的文件,一个有两个匹配的文件,三个或四个。
我正在使用' skip'变量,以尝试并遍历已经匹配的循环的迭代,以避免重复。
我认为这个问题来自于我使用' i'可能从列表中获取元素的变量,但我不确定。
你可能会说我不熟悉Python和编程,并且在我的逻辑中有一个严重的缺陷,我无法看到!如果有什么不清楚,我会尽我所能解释,任何帮助将不胜感激。
reader = [34113751IHF.jpg, 34113751IHR.jpg, 34136676OTD.jpg, 34136676OTF.jpg, jpg34136676OTR.jpg, 34136676OTF.jpg, 34136676OTR.jpg, 34139933EDD.jpg, 34139933EDF.jpg, 34144626KXF.jpg, 34144626KXR.jpg]
iterable = iter(reader)
skip = 0
for i, j in enumerate(iterable):
firstURL = str(j)[2:-2]
firstShorter = str(reader[i+1])[2:-3]
secondURL = str(reader[i+1])[2:-2]
secondShorter = str(reader[i+1])[2:-3]
if firstShorter == secondShorter:
toWrite = firstURL + ".jpg|" + secondURL + ".jpg"
thirdURL = str(reader[i+2])[2:-2]
thirdShorter = str(reader[i+2])[2:-3]
skip = 2
if secondShorter == thirdShorter:
toWrite += "|" + thirdURL + ".jpg"
fourthURL = str(reader[i+3])[2:-2]
fourthShorter = str(reader[i+3])[2:-3]
skip = 3
if thirdShorter == fourthShorter:
toWrite += "|" + thirdURL + ".jpg"
fifthURL = str(reader[i+4])[2:-2]
fifthShorter = str(reader[i+4])[2:-3]
skip = 4
else:
toWrite = firstURL + ".jpg"
skip = 1
[iterable.__next__() for x in range(skip)]
答案 0 :(得分:2)
如果我理解正确你想要一个组所有匹配的文件名(除了最后一个字符和'.jpg')成为一个串联的所有文件名的字符串?以下是如何执行此操作的示例:
from collections import Counter
# The list you provided
reader = ['34113751IHF.jpg', '34113751IHR.jpg', '34136676OTD.jpg', '34136676OTF.jpg', '34136676OTR.jpg',
'34136676OTF.jpg', '34136676OTR.jpg', '34139933EDD.jpg', '34139933EDF.jpg', '34144626KXF.jpg',
'34144626KXR.jpg']
# Creating a copy of the list but without the last character and '.jpg'
check_list = [x[:-5] for x in reader]
counter = Counter(check_list)
grouped_list = [[k]*v for k, v in counter.items()]
这将创建符合条件的所有文件名列表。如果您想要该列表的字符串表示,您可以这样做:
string_rep = " | ".join(["".join(element) for element in grouped_list])
print(string_rep)
OUTPUT: 34113751IH34113751IH | 34144626KX34144626KX | 34139933ED34139933ED | 34136676OT34136676OT34136676OT34136676OT34136676OT