-1

一次是初学者,永远是初学者!我正在使用 python 2.7.5、OSX 10.8

即使您不知道 pyfits,您也可能有我的问题的解决方案,因为我相信这是我算法中的问题!我使用以下代码

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import pyfits
from PySide import QtGui, QtCore
import os
import fonctions
print('\n\n')

directory = raw_input("file path : ")

hdulist=pyfits.open(directory)
print('\n\n')
print('--------------------------------fits informations :')
hdulist.info()
print ('\n\n')


print("\n")
j=0 #PyFITS is using zero-based indexing when referring to HDUs
k=0  
while True: #runs through all the HDUs
    try:    
        hdulist[j].header[k] is None
    except IndexError:  #errors handling when coming to the last HDU
        print("--------------------------------No more HDU! \n\n\n\n\n\n")
        break

    while True: #runs through all the headers
        try:
            hdulist[j].header[k] is None
        except IndexError:  #errors handling when coming to the last header
            i=0
            break
        header = hdulist[j].header[k]
        print (hdulist[j].header.ascardlist())
        k=k+1
    j=j+1

它“有效”,因为它显示 hdulist[j].header.ascardlist(),但它会打印它 k 次,然后再转到下一个 HDU……有什么建议吗?

4

3 回答 3

1

我从未使用过 Pyfits,但我查看了文档。我会说这个循环结构,应该更合适

for hdu in hdulist:
    for hdu_header in hdu.header.itervalues():
        print( hdu_header.ascardlist() )

希望我能帮助你。

于 2013-07-08T15:53:44.413 回答
0

我确信分配 k=0 需要进入外部“while True”循环,因为它需要为每个新的 j 重置。

于 2013-11-11T22:34:36.277 回答
0

您并没有真正解释这应该做什么,但看起来您只是想显示 HDU 中的所有标题。不需要 while 语句或 try/excepts。这应该足够了:

with pyfits.open(filename) as hdulist:
    for hdu in hdulist:
        print hdu.header
于 2013-11-30T04:27:24.107 回答