我是python的初学者,需要一些帮助。尝试处理一些dat文件时遇到问题。
我创建了159个数据文件(refitted_to_digit0_0.dat, refitted_to_digit0_1.dat, ...refitted_to_digit0_158.dat
),其中包含两列2999行的时间序列数据(时间步长,值)。在我的python程序中,我使用filelist_refit_0=glob.glob('refitted_to_digit0_*')
plist_refit_0=[]
我现在尝试将每个159个文件的第二列加载到plist_refit_0
中,以便列表中的每个位置包含2999个值(第二列)的数组,我将使用它们进行进一步的操作。我为此创建了一个for循环,并使用len(filelist_refit_0)
作为循环的范围。长度为159(文件数:0-158)。
但是,当我运行此命令时,我收到一条错误消息:list index out of range
。
我尝试过使用for循环的较低范围,它似乎可以工作到范围66,但不能超过该范围。 filelist_refit_0[66]
引用文件refitted_to_digit0_158.dat
,filelist_refit_0[67]
引用refitted_to_digit0_16.dat
。 filelist_refit_0[158]
是指refitted_to_digit0_99.dat
。我认为plist_refit_0
的文件不是基于数字的升序排序,而是根据数字的升序排序:首先是refitted_to_digit0_0.dat,然后是refitted_to_digit0_1.dat
,然后是{{1 }},然后是refitted_to_digit0_10.dat
,然后是refitted_to_digit0_101.dat,导致refitted_to_digit0_100.dat
在列表中的位置66。但是,我仍然不明白为什么refitted_to_digit0_158.dat
的长度为159并且实际上有159个文件时,无论顺序如何,编译器都将索引解释为超出66的范围。如果有人可以解释这一点,并且对如何解决此问题提出建议,我将非常感激!谢谢你的帮助。
我已经尝试了以下方法来理解排序:
filelist_refit_0
我已经“手动”加载了文件,并且似乎适用于大多数索引。
print len(filelist_refit_0) => 159
print filelist_refit_0[66] => refitted_to_digit0_158.dat
print filelist_refit_0[67] => refitted_to_digit0_16.dat
print filelist_refit_0[158] => refitted_to_digit0_99.dat
print filelist_refit_0[0] => refitted_to_digit0_0.dat
但不适用于index66 !:
t, p = loadtxt(filelist_refit_0[65], usecols=(0, 1), unpack=True)
plist_refit_0.append(p)
t, p = loadtxt(filelist_refit_0[67], usecols=(0, 1), unpack=True)
plist_refit_0.append(p)
print plist_refit_0[0]
print plist_refit_0[1]
然后我得到了错误:t, p = loadtxt(filelist_refit_0[66], usecols=(0, 1), unpack=True)
plist_refit_0.append(p)
。
从上面可以看出,它引用了list index out of range
,这是最后一个文件。我查看了该文件,它看起来与所有其他文件完全相同,它们的列数和原始元素数相同(2999)。为什么此项不同?
Python 2:
refitted_to_digit0_158.dat
filelist_refit_0 = glob.glob('refitted_to_digit0_*')
plist_refit_0 = []
for i in range(len(filelist_refit_0)):
t, p = loadtxt(filelist_refit_0[i], usecols=(0, 1), unpack=True)
plist_refit_0.append(p)