Я запускаю python2.5 и пытаюсь использовать библиотеку astLib для анализа информации WCS в астрономических изображениях. Я пытаюсь получить объект, связанный со следующим скелетным кодом:
from astLib import astWCS
w = astWCS.WCS('file.fits') # error here
где file.fits - это строка, указывающая на действительный файл соответствия.
Я попытался использовать альтернативный метод передачи объекта заголовка pyfits, и это также не удалось:
import pyfits
from astLib import astWCS
f = pyfits.open('file.fits')
header = f[0].header
f.close()
w = astWCS.WCS(header, mode='pyfits') # error here also
Ошибка:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/astro/phrfbf/build/lib/python2.6/site-packages/astLib/astWCS.py", line 79, in __init__
self.updateFromHeader()
File "/home/astro/phrfbf/build/lib/python2.6/site-packages/astLib/astWCS.py", line 119, in updateFromHeader
self.WCSStructure=wcs.wcsinit(cardstring)
File "/home/astro/phrfbf/build/lib/python2.6/site-packages/PyWCSTools/wcs.py", line 70, in wcsinit
return _wcs.wcsinit(*args)
TypeError: in method 'wcsinit', argument 1 of type 'char *'
Когда я запускаю в ipython, я получаю полную ошибку здесь, на pastebin
Я знаю, что модуль astWCS представляет собой завернутую версию WCStools, но я бы предпочел использовать модуль Python, поскольку остальная часть моего кода находится в Python
Может ли кто-нибудь помочь с этой проблемой?
Просто выяснилось, что обновленная версия этой библиотеки исправила проблему, спасибо за помощь всем
Извините, мне следовало это видеть. Глядя на pastebin более подробно, единственная ошибка, о которой я могу думать, состоит в том, что по какой-то причине заголовок имеет в нем юникод. Он не может быть преобразован в char *
, и вы получите ошибку. Я попытался найти что-то в заголовке, но все выглядит нормально. Можете ли вы сделать это и опубликовать вывод в другом пастебине?
import pyfits
f = pyfits.open('file.fits')
header = f[0].header
f.close()
for x, i in enumerate(header.iteritems()):
if len(str(i[1])) >= 70:
print x, str(i[1])
cardlist = header.ascardlist()
cardstring = ""
for card in cardlist:
cardstring = cardstring + str(card)
print repr(cardstring)
Или, если вы можете проверить заголовок вашего файла fits для "смешных" символов, избавление от них должно решить проблему.