python np.genfromtxt 迭代文件

2 投票
1 回答
799 浏览
提问于 2025-04-18 17:24

我正在尝试写一个Python脚本,从两个文件中读取数据,然后绘制一些列的图表。这两个文件的格式是一样的(9列,100行)。我想用一个“for”循环来实现,这样可以让代码更简洁(比如说,如果我有30个文件的话)。但是我的代码出现了错误,无法正常工作:

Traceback (most recent call last):
  File "./plot-test.py", line 19, in <module>
    np.genfromtxt(('fil'+str(i)), unpack = True, skip_header = 1)
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 1241, in genfromtxt
    fhd = iter(np.lib._datasource.open(fname, 'rbU'))
  File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 145, in open
    return ds.open(path, mode)
  File "/usr/lib/python2.7/dist-packages/numpy/lib/_datasource.py", line 479, in open
    raise IOError("%s not found." % path)
IOError: fil1 not found.

这是我目前的代码:

#!/usr/bin/python

import numpy as np
import matplotlib.pyplot as plt


fil1 ='/home/aya/Arietids/test-GR/back-2h.dat' 
fil2 ='/home/aya/Arietids/test-GR/back-gr-2h.dat'

fig = plt.figure()

for i in xrange(1,2):
      t[i],JD[i],a[i],e[i],inc[i],lasc[i],aper[i],tru[i],nam[i] = \
      np.genfromtxt(('fil'+str(i)), unpack = True, skip_header = 1)

for i in xrange(2,2):
    plt.subplot(211)
    plt.plot(a[i-1] - a[i])

for i in xrange(2,2):
    plt.subplot(212)
    plt.plot(e[i-1] - e[i])

plt.xlabel("Time, 0 = present") 
plt.ylabel("$\Delta$ e")

plt.savefig('ae.eps')

有没有人知道为什么Python找不到“fil1”,或者为什么代码会出错呢?提前谢谢大家!

1 个回答

0

"fil"+str(i) 是一个字符串,而不是变量 fil1。所以你实际上是在尝试打开一个名为 "fil1" 的文件。

另外,范围的上限是不包括在内的,所以即使这个方法能用,你也不会打开两个文件。

fil1fil2 放在一个列表里:

l  = [fil1, fil2]
for i, f in enumerate(l,1): # now i starts at 1

撰写回答