2015-11-25 35 views
0

我試圖在Python中處理.cbf(Crystallographic Binary Format,請參閱下面的鏈接)文件。我需要一種循環遍歷當前目錄中所有文件的方式。Python - 通過循環訪問目錄打開FabIO模塊中的圖像

實施例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. 

代碼的這一部分,其設計成打開和顯示文件完美地工作。法比奧具有開口可用的下一個文件,該文件是在這種情況下的格式的方法,包括:

實施例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

法比奧模塊: http://pythonhosted.org/fabio/getting_started.html

回答

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)) 
+0

謝謝,這看起來就像我所需要的。 – Nathan

+0

剛剛實現了這一點,它按預期完美工作。只是將%03d更改爲%04d,以便處理更大的文件集。我以後也會給恕我直言的存儲空間。再次感謝。 – Nathan

+0

如果您認爲此答案可解決您的問題,請考慮[接受](http://stackoverflow.com/help/someone-answers)。順便說一下,[恕我直言](http://dictionary.reference.com/browse/imho)僅僅是我的卑微觀點*的初始*; – memoselyk