Python - 通过循环目录在FabIO模块中打开图像

时间:2015-11-25 14:57:43

标签: python python-2.7 loops for-loop

我正在尝试使用Python处理.cbf(Crystallographic Binary Format,请参阅下面的链接)文件。我需要一种循环遍历当前目录中所有文件的方法。

示例1

# Reading in first file in FabIO.

dat = raw_input('Please Input Required Filename: ')     # Define the required filename as a string.

# Example Input: file.cbf

import fabio                                            # Import FabIO module for Python.

img_0001 = fabio.open(dat)                              # Open image from defined filename.

此部分代码旨在打开和显示文件,完美运行。 FabIO有一种打开下一个可用文件的方法,在这种情况下格式为:

示例2

img_0002 = img_0001.next() 

由于我已在示例1中定义了img_0001,因此该代码可以正常工作。

如何在不需要为每个文件执行示例2中的命令的情况下循环遍历当前目录中的所有文件?如果有100个文件,它会是什么形式:

示例3

for i in range (1, 99)
   img_'i+1' =  img_000'i'.next() 

如何进行此循环,同时还要考虑前导零?

非常感谢任何帮助,谢谢!

相关信息

CBF文件: http://www.esrf.eu/computing/Forum/imgCIF/cbf_definition.html

FabIO模块: http://pythonhosted.org/fabio/getting_started.html

1 个答案:

答案 0 :(得分:0)

如果您正在寻找一种执行动态生成代码的方法,请使用exec语句。因此,您的for循环可以重写为:

for i in range (1, 99)
    exec ("img_%03d = img_%03d.next()" % (i+1, i))

但是,您可以使用fabimage.getframe简化表达式的lhs(左侧),并且将图像存储在列表中的恕我直言将简化其后续访问:

imgs = [img_000]  
for i in range (1, 99)
    imgs.append(img_000.getframe(i))