<p>这里发生了很多事情,你发布的代码甚至都是无效的(有缩进错误)。我认为这里没有一个关于堆栈溢出的有用的问题,因为你在没有意识到的情况下滥用了很多东西。也就是说,我希望能有所帮助,所以我发布了一个答案,而不仅仅是一个评论,因为我在答案中的代码格式更好。在</p>
<p>首先,我不知道你想要什么:</p>
<pre><code>pathfile = '*_v0' + str(x) + '.fits'
</code></pre>
<p>因为在这之前</p>
^{pr2}$
<p>所以您可以检查,<code>str(x)</code>只是一个常量字符串<code>'[]'</code>。所以你是说你想要一个通配符模式,看起来像<code>'*_v0[].fits'</code>,我怀疑这是你想要的,但是即使是这样,你也应该显式地写,不使用<code>str(x)</code>间接寻址。在</p>
<p>然后,在<code>glob.glob</code>结果的循环中,您将执行以下操作:</p>
<pre><code>imn = 'FilePath' + str(name)
</code></pre>
<p><code>name</code>应该已经是一个字符串,所以不需要<code>str(name)</code>。我不知道你为什么要在<code>'FilePath'</code>前面加上前缀,因为<code>glob.glob</code>返回的文件名与通配符模式匹配。那你为什么要在文件名前面加上什么?在</p>
<p>接下来,测试<code>(192 <= a <= 206)</code>两次。您只需检查一次,不要使用<code>is True</code>和{<cd12>}。比较的结果已经是布尔值,所以不需要进行额外的比较。在</p>
<p>最后,在这里使用Numpy数组没有太大的优势,除非你在数千个FITS文件上循环。但是使用<code>np.append</code>来增长数组是非常缓慢的,因为在每个循环中都会生成一个数组的新副本。在大多数情况下,您可以使用Python列表,然后根据需要将列表转换为Numpy数组。如果<em>首先使用Numpy数组,那么可以使用<code>np.zeros()</code>预先分配一个一定大小的空数组。你可以先猜一个尺寸开始,然后在需要的时候再增加。因为你在一个文件列表上循环,你可以使用你循环的文件数量。在</p>
<p>下面是我想用更惯用的Python所做的改写:</p>
<pre><code>
def graph(n_pass):
x = []
y1 = []
for filename in glob.glob('*_v0.fits'):
header = pf.getheader(filename)
a = header['a']
if not (192 <= a <= 206):
# We don't do any further processing for this file
# for 'a' outside this range
continue
im = pf.getdata(filename, origin='lower')
subim1 = im[340:390, 75:120]
p1 = np.mean(subim1)
t = get_time(...)
y1.append(p1)
x.append(t)
</code></pre>
<p>你也可以考虑更清楚的变量名,等等。我相信这不是你想要的,但也许这会给你一个更好的结构来使用。在</p>