0

私はPythonでのプログラミングが初めてで、Pythonで1つのコードで何千ものファイルを処理するセットアップを作成しようとしています。これを行うための練習用フォルダーを作成しました。その中には、2 つの FITS ファイル (FITS1.fits と FITS2.fits) があります。両方を .txt ファイルに入れるために次のことを行いました。

ls > practice.txt

これが私が次にしたことです:

$ python
import numpy
import pyfits
import matplotlib.pyplot as plt
from matplotlib import pylab
from pylab import *
import asciidata

a = asciidata.open('practice.txt')

print a[0][0] #To test to see if practice.txt really contains my FITS files FITS1.fits
i = 0
while i <=1 #Now I attempt a while loop to read data from columns in FITS files, plot the numbers desired, save and show the figures. I chose i <=1 because there are only two FITS files in the text(also because of zero-indexing). 

    b = pyfits.getdata(a[0][i]) # "i" will be the index used to use a different file when the while loop gets to the end

    time = b['TIME'] #'TIME' is a column in the FITS file
    brightness = b['SAP_FLUX']
    plt.plot(time, brightness)
    xlabel('Time(days)')
    ylabel('Brightness (e-/s)')
    title(a[0][i])

    pylab.savefig('a[0][i].png') #Here am I lost on how to get the while loop to name the saved figure something different every time. It takes the 'a[0][i].png' as a string and not as the index I am trying to make it be.

    pylab.show()

    i=i+1 # I placed this here, hoping that when the while loop gets to this point, it would start over again with a different "i" value

Enter キーを 2 回押した後、期待どおりに最初の図が表示されます。それから私はそれを閉じて、2番目を見ます。ただし、最初の図のみが保存されます。ループを変更して必要なことを行う方法について誰か提案がありますか?

4

2 に答える 2

2

globを使用して、fitsファイルをリストとして自動的に取得する必要があります。そこから、forループを使用すると、インデックスを使用する代わりに、ファイルの名前を直接繰り返すことができます。を呼び出すときはplt.savefig、保存するファイル名を作成する必要があります。クリーンアップしてまとめたコードは次のとおりです。

from glob import glob
import pyfits
from matplotlib import pyplot as plt

files = glob('*.fits')

for file_name in files:
    data = pyfits.getdata(file_name)
    name = file_name[:-len('.fits')] # Remove .fits from the file name

    time       = data['TIME']
    brightness = data['SAP_FLUX']

    plt.plot(time, brightness)

    plt.xlabel('Time(days)')
    plt.ylabel('Brightness (e-/s)')
    plt.title(name)

    plt.savefig(name + '.png')
    plt.show()
于 2012-06-18T20:51:55.750 に答える
2

あなたのコードでは、iは変数ではなく文字iとして扱われています。この名前を付けたままにしたい場合は、次のようにすることができます。

FileName = 'a[0][%s].png' % i
pylab.savefig(FileName)
于 2012-06-18T20:52:20.123 に答える