2017-07-18 57 views
1

我有一个列表与几串返回第一项/迭代的for循环

myList = ['someFileName_red', 'someFileName_blue_v006', 'someFileName_green_v004'] 

我想使用这个列表作为搜索条件来查找图像序列与我的服务器上的名称相符。这些图像序列位于服务器上的所有地方。

根目录从中我将开始我的搜索是:

rootPath = r'C:\Users\userName\Desktop\Seq' 

我试图创建一个for循环,搜索由myList中ROOTPATH变量的数量,但我发现很难将for循环的结果作为循环中的第一项返回。下面是和例子是我想要做的事:

for root, dirs, files in os.walk(rootPath): 
    for x in shotList: 
     for file in files: 
      if file.startswith(x): 
       if file.endswith('.exr'): 
        print os.path.join(root,file) 

将返回:

C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0101.exr 
C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0102.exr 
C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0103.exr 
C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0104.exr 
C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0105.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0101.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0102.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0103.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0104.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0105.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0106.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0107.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0101.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0102.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0103.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0104.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0105.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0106.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0107.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0108.exr 

我想回去是图像序列的第一帧:

C:\Users\userName\Desktop\Seq\shot\images\someFileName_red.0101.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_blue\V006\Images\someFileName_blue_v006.0101.exr 
C:\Users\userName\Desktop\Seq\shot\someFileName_green\V004\Images\someFileName_green_v004.0101.exr 
+1

只要看看你的例子,你可以在'print'语句之后添加一个'break'语句,这个语句将打破内部循环(因此继续外部循环)。但是,如果您有多个匹配相同名称的图像序列,则它们也会被跳过。所以这真的取决于你的具体设置。 –

回答

0

打印第一个文件和波纹管后需要添加break

for root, dirs, files in os.walk(rootPath): 
    for x in shotList: 
     for file in files: 
      if file.startswith(x) and file.endswith('.exr'): 
       print os.path.join(root,file) 
       break