python在嵌套for循环中跳过内部循环

Tan*_*anj 0 python nested-loops

我正在使用一些python来做一些变量名称生成.出于某种原因,我只是得到了我需要的一部分.

import sys
import csv

params = csv.reader(open('params.csv'), delimiter=',', skipinitialspace=True)

flags_r = []
flags_w = []
numbers_r = []
numbers_w = []
station = ['AC1','DC1','DC1']
drive = ['','Fld','Arm']

for i in range(3):
    for p in params:
        try:
            desc = p[1].split(' ')
            desc = [part.capitalize() for part in desc]
            desc = "".join(desc)
        except IndexError, e:
            print 'IndexError: %s' %(e,)
            continue
        print station[i],drive[i],p[0]
        flags_r.append( 'mod%(station)s_%(drive)sP%(param)04dr_%(desc)s' % \
                          { 'station' : station[i], 'drive' : drive[i], 'param': int(p[0]), 'desc':desc })
        flags_w.append( 'mod%(station)s_%(drive)sP%(param)04dw_%(desc)s' % \
                          { 'station' : station[i], 'drive' : drive[i], 'param': int(p[0]), 'desc':desc })
        numbers_r.append( 'mod%(station)s_%(drive)sP%(param)04drn_%(desc)s' % \
                          { 'station' : station[i], 'drive' : drive[i], 'param': int(p[0]), 'desc':desc })
        numbers_w.append( 'mod%(station)s_%(drive)sP%(param)04dwn_%(desc)s' % \
                          { 'station' : station[i], 'drive' : drive[i], 'param': int(p[0]), 'desc':desc })

    print i
Run Code Online (Sandbox Code Playgroud)

params.csv:

100, Speed Reference
101, Speed Feedback
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它输出:

AC1 100
AC1 101
0
1
2

try/except的原因是捕获csv文件中的任何空行或缺少第二个字段.

看来内部循环只在第一次传递时执行.我可以看到这个发生的唯一原因是try/except,因为我已经做了一个交互式示例来测试它.

sth*_*sth 6

在外循环的第一次迭代中,您将读取所有行params.在第二次迭代中,所有的行都params已经被读取,因此在内部循环中没有任何内容可以迭代.

要解决此问题,您可以将所有数据集加载到列表中,然后遍历该列表:

reader = csv.reader(open('params.csv'), delimiter=',', skipinitialspace=True)
params = list(reader)
Run Code Online (Sandbox Code Playgroud)