我有这段代码
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
是一个标题和a = len(halo_param)
chararray(['465000725000010', '43000145000011', '40000536000011',
'499000523000009', '463000313000010', '470000639000011',
'462000416000010', '499000549000008', '506000176000009']
我想要做的是,我的程序应该逐个接受halo_param的值,并根据a的范围写出文件(即说第一个文件应该命名为halo_0.fits和第二个halo_1.fits等)
如果我删除第二个for循环,我的程序似乎有效,即它打印出值为halo_param的文件,如halo_465000725000010,halo_43000145000011等。
如果包含第二个for循环,我的程序确实有效,但对所有文件执行相同的第一个条件
我在这里做错了什么?
答案 0 :(得分: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))
编辑:如果你追踪循环中的循环,你会看到它试图将halo_param [0]写入file_0,然后将halo_param [1]写入file_0和file_1, ...然后halo_param [8]到file_0,file_1,file_2 ... file_8。最终所有文件都是最后一个文件的副本。
答案 1 :(得分: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)))