python图像序列循环问题
我正在写一个脚本来检查文件列表中的图像序列。到目前为止,它运行得相当好,但出于某种原因,它总是跳过每个新序列的第一个文件。这是我目前的代码:python图像序列循环问题,python,loops,Python,Loops,我正在写一个脚本来检查文件列表中的图像序列。到目前为止,它运行得相当好,但出于某种原因,它总是跳过每个新序列的第一个文件。这是我目前的代码: import os, re filelist = ["A01B02_0123_A333.01234321.ari", "A01B02_0123_A333.01234322.ari", "A01B02_0123_A333.01234323.ari", "A01B02_0123_A333.01234324.ari", "A01B02_0123_A333.012
import os, re
filelist = ["A01B02_0123_A333.01234321.ari", "A01B02_0123_A333.01234322.ari", "A01B02_0123_A333.01234323.ari", "A01B02_0123_A333.01234324.ari", "A01B02_0123_A333.01234325.ari", "A01B02_0123_A333.01234326.ari", "A01B02_0123_A333.01234327.ari", "A01B02_0123_A333.01234328.ari", "A01B02_0123_A333.01234329.ari", "A01B02_0123_A333.01234330.ari", "A01B02_0123_A333.01234331.ari", "A02B03_0123_A444.0052.ari", "bus_v01.1001.tif", "bus_v01.1002.tif", "bus_v01.1003.tif", "bus_v02.1001.tif", "bus_v02.1002.tif", "bus_v02.1003.tif", "elementA_1001.jpg", "elementA_1002.jpg", "elementA_1003.jpg", "elementB_1001.jpg", "elementB_1002.jpg", "elementB_1003.jpg"]
def digitgroups(file):
padding_expr = re.compile("\d+")
lastfile = ""
sequence_index = 0
for file in filelist:
if file.endswith((".dpx", ".ari", ".jpg", ".tif")):
match = re.findall(padding_expr, file)[::-1]
lastmatch = re.findall(padding_expr, lastfile)[::-1]
if len(match) == len (lastmatch) and file != lastfile:
for i in range (0, len(match)):
digit_difference = int(lastmatch[i])-int(match[i])
if not (digit_difference) == 0:
if digit_difference == -1 or digit_difference == 1 and os.path.splitext(file)[-1] is os.path.splitext(l)[-1]:
print file, "a is part of sequence {0}".format(sequence_index)
elif digit_difference < -1 or digit_difference > 1:
sequence_index += 1
break
lastfile = file
digitgroups(filelist)
导入操作系统,重新
“A01B02布布02布留留留留留留3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 330.ari“,“A01B02_0123_A333.01234331.ari”,“A02B03_0123_A444.0052.ari”,“总线v01.1001.tif”,“总线v01.1002.tif”,“总线v01.1003.tif”,“总线v02.1001.tif”,“总线v02.1002.tif”,“总线v02.1003.tif”,“元素A_1001.jpg”,“元素A_1002.jpg”,“元素A_1003.jpg”,“元素B_1001.jpg”,“元素B”]
def数字组(文件):
padding\u expr=re.compile(“\d+”)
lastfile=“”
序列索引=0
对于文件列表中的文件:
如果文件.endswith((“.dpx”、“.ari”、“.jpg”、“.tif”):
match=re.findall(padding_expr,file)[::-1]
lastmatch=re.findall(padding_expr,lastfile)[::-1]
如果len(match)==len(lastmatch)和file!=lastfile:
对于范围(0,len(匹配))中的i:
数字差=int(最后匹配[i])-int(匹配[i])
如果不是(数字_差)==0:
如果Digital_difference==1或Digital_difference==1且os.path.splitext(文件)[-1]为os.path.splitext(l)[-1]:
打印文件,“a是序列{0}的一部分”。格式(序列索引)
elif数字差<-1或数字差>1:
序列索引+=1
打破
lastfile=file
数字组(文件列表)
除了注释中提到的所有内容外,循环取决于lastfile
是否为空
第一次通过时:
if len(match) == len (lastmatch) and file is not lastfile:
在第一次传递时将不为true,因为lastfile被设置为”
,而len(lastmatch)
将为0
另外,您正在传入list
,然后在函数中调用iffile
。
下面的解决方案对我有效(经过编辑,更完整的解决方案):
导入操作系统,重新
“A01B02-U0123-A333.01233.012343213.33.0123432.A333.012343333.01233333.0123432.32.ari”、“A01B02-U0123-A333.012333.0123.0123.0123.0123.0123.0123.0123.3.3.3.3.3.3.3.2.ari”、“ari”、“ari”、“Ar利”、“亚10 10 10亿布02-布02-02-02-2-U0123.3.3.3.0123.3.3.3.3.0123.0123.0123.3.0123.0123.0123.0123.3.0123.3.3.3.3.3.3.3.0123432.3.3.3.3.3.32.32.32.32.32.32.32.32.32.32.32.2.2.2.2.2.2 330.ari“A01B02_0123_A333.01234331.ari”、“A02B03_0123_A444.0052.ari”、“总线v01.1001.tif”、“总线v01.1002.tif”、“总线v01.1003.tif”、“总线v02.1001.tif”、“总线v02.1002.tif”、“总线v02.1003.tif”、“元素A_1001.jpg”、“元素A_1002.jpg”、“元素A_1003.g”、“元素B_1002.jpg”、“元素B.jpg”]
def数字组(文件):
padding\u expr=re.compile(“\d+”)
lastfile=“”
序列索引=0
对于文件中的f:
如果f.endswith((“.dpx”、“.ari”、“.jpg”、“.tif”):
match=re.findall(padding_expr,f)[::-1]
lastmatch=re.findall(padding_expr,lastfile)[::-1]
如果len(match)=len(lastmatch)且f不是lastfile:
对于范围(0,len(匹配))中的i:
数字差=int(最后匹配[i])-int(匹配[i])
如果不是数字_差==0:
如果Digital_difference==-1或Digital_difference==1,并且os.path.splitext(f)[-1]是os.path.splitext(l)[-1]:
打印(f,“a是序列{0}的一部分”。格式(序列索引))
elif数字差<-1或数字差>1:
序列索引+=1
打破
其他:
打印(f,“a是序列{0}的一部分”。格式(序列索引))
lastfile=f
数字组(mylist)
注意
lastfile=files.pop(0)
。这将从文件列表中获取第一个元素。尝试编码阻止您的代码,以便我们可以实际读取。is
比较对象标识,而=
比较对象值。您希望文件!=lastfile
列表
是一个内置类型,您正在重写它。这是一种错误的做法。@Alelist
是一种类型,但是是的,它是内置的,不应该用作名称。我不知道这段代码试图实现什么。感谢您的详细回答!这解决了我的部分问题->不仅我列表中的第一个文件被删除,而且新序列中的每个第一个文件都会发生这种情况;例如“elementB_1001.jpg”、“bus_v01.1001.tif”“,等等。这是因为如果len(match)==len(lastmatch).
行再次出现。对于每个序列更改,它很可能都是错误的。因此序列中的第一个文件没有打印出来,然后该文件作为最后一个文件
放入,序列的其余部分匹配。我想您应该考虑在if
中添加一个else
。如果不匹配,则假定它是序列中的第一个。或者类似的东西看到编辑过的解决方案,看起来像你解释的那样工作是的,这确实像预期的那样工作!“elementB_1001.jpg”和“A02B03_0123_A444.0052.ari”未打印,因此我必须稍微调整我的循环,但您为我指出了正确的方向-谢谢!
import os, re
mylist = ["A01B02_0123_A333.01234321.ari", "A01B02_0123_A333.01234322.ari", "A01B02_0123_A333.01234323.ari", "A01B02_0123_A333.01234324.ari", "A01B02_0123_A333.01234325.ari", "A01B02_0123_A333.01234326.ari", "A01B02_0123_A333.01234327.ari", "A01B02_0123_A333.01234328.ari", "A01B02_0123_A333.01234329.ari", "A01B02_0123_A333.01234330.ari", "A01B02_0123_A333.01234331.ari", "A02B03_0123_A444.0052.ari", "bus_v01.1001.tif", "bus_v01.1002.tif", "bus_v01.1003.tif", "bus_v02.1001.tif", "bus_v02.1002.tif", "bus_v02.1003.tif", "elementA_1001.jpg", "elementA_1002.jpg", "elementA_1003.jpg", "elementB_1001.jpg", "elementB_1002.jpg", "elementB_1003.jpg"]
def digitgroups(files):
padding_expr = re.compile("\d+")
lastfile = ""
sequence_index = 0
for f in files:
if f.endswith((".dpx", ".ari", ".jpg", ".tif")):
match = re.findall(padding_expr, f)[::-1]
lastmatch = re.findall(padding_expr, lastfile)[::-1]
if len(match) == len(lastmatch) and f is not lastfile:
for i in range (0, len(match)):
digit_difference = int(lastmatch[i])-int(match[i])
if not digit_difference == 0:
if digit_difference == -1 or digit_difference == 1 and os.path.splitext(f)[-1] is os.path.splitext(l)[-1]:
print(f, "a is part of sequence {0}".format(sequence_index))
elif digit_difference < -1 or digit_difference > 1:
sequence_index += 1
break
else:
print(f, "a is part of sequence {0}".format(sequence_index))
lastfile = f
digitgroups(mylist)