我是Python的新手,我正在尝试编写一个脚本,让我从我生成的几个文件中读取数据(它们有一组命名方案)。但是当我尝试运行它时,我一直得到上面的IndexError。
before = [29, 22, 21]
after = [6, 6, 1]
prop = ['n_force', 'n_force_sub', 'x_force', 'x_force_sub']
for pi in prop:
for m in before:
t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m],after[m],prop[pi]),unpack=True, skiprows=2)
编辑|问题已解决:我通过将before
和after
数组转换为字符串并将代码更改为以下内容来解决此问题:
before = ['29', '22', '21']
after = ['6', '6', '1']
prop = ['n_force', 'n_force_sub', 'x_force', 'x_force_sub']
for l in range(0,3):
for m in range(0,2):
t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m], after[m], prop[l]) ,unpack=True, skiprows=2)
之后我有更多的代码来打印抓取的数据,但现在我正在努力将数据保存到文件或其他东西。谢谢大家:)
答案 0 :(得分:0)
在处理2个不同的列表时,您需要zip()
它们一起循环它。
for pi, m in zip(prop, before):
t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(before[m],after[m],prop[pi]),unpack=True, skiprows=2)
答案 1 :(得分:0)
m
遍历before
并按顺序获取值29, 22, 21
。
before
和after
没有30个元素,因此before[m]
(在[29]之前)将会中断。
如果您希望一次循环两个序列,最好使用zip
配对值,例如;
for pi in prop:
for b,a in zip(before, after):
t, fn = np.genfromtxt("peg_4_60_shear_{0}.{1}.{2}".format(b, a, prop[pi]),unpack=True, skiprows=2)