2014-03-03 35 views
0

我有這樣的代碼嵌入式for循環的Python

for n in halo_param: 
    for i in range(0,a): 
     mask = var1['halo_id'] == n 
     newtbdata = tbdata1[mask] 
     hdu = pyfits.BinTableHDU(newtbdata) 
     hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits').format(i)) 

這裏halo_param是chararray和a = len(halo_param)

chararray(['465000725000010', '43000145000011', '40000536000011', 
    '499000523000009', '463000313000010', '470000639000011', 
    '462000416000010', '499000549000008', '506000176000009'] 

我所試圖做的是,我的程序應在halo_param的值,逐個寫出文件,並根據範圍寫出文件(即說第一個文件應命名爲halo_0.fits和second halo_1.fits等)

我的程序似乎如果我刪除我的第二個for循環即它打印出與halo_param值的文件,如halo_465000725000010,halo_43000145000011等

如果循環,二是包括在內,我的程序做的工作工作,但對所有文件執行相同的第一個條件

我在這裏做錯了什麼?

回答

3

不要做循環在一個循環;弄平,像

for i,n in enumerate(halo_param): 
    mask = var1['halo_id'] == n 
    newtbdata = tbdata1[mask] 
    hdu = pyfits.BinTableHDU(newtbdata) 
    hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits').format(i)) 

編輯:如果您跟蹤通過循環-IN-A-循環,你會看到,它試圖寫入halo_param [0]到file_0,然後halo_param [1]到file_0和file_1,...然後halo_param [8]到file_0,file_1,file_2 ... file_8。最終所有文件都是最後一個文件的副本。

+0

這似乎工作!但如果可能的話,你能解釋爲什麼循環內循環不起作用? – ThePredator

+0

但是,如果a = 10,並且當我在範圍(0,a)中說我:我不在每個步驟中取值0到9?這就是我以這種方式編寫代碼的原因。 – ThePredator

+1

@Srivatsan:是的,我的不好:對於項目0,它寫入所有文件;那麼對於第1項,它將_all_文件寫入_again_,從而破壞上一週期的工作;然後是項目2,3 ...... 9.您最終反覆地完成這項工作,最終只得到項目9的輸出。展平循環將項目1的數據放入文件1中,項目2的數據放入文件2中等。 –

0

修復字符串格式?

for n in halo_param: 
    for i in range(0,a): 
     mask = var1['halo_id'] == n 
     newtbdata = tbdata1[mask] 
     hdu = pyfits.BinTableHDU(newtbdata) 
     hdu.writeto(('/home/ssridhar/test_roncarelli/13.8_M200_13.9/halo_{0}.fits'.format(i)))