0

いくつかの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

params.csv:

100, Speed Reference
101, Speed Feedback

何らかの理由で出力しています:

AC1 100
AC1 101
0
1
2

try / exceptionの理由は、csvファイルの空白行または欠落している2番目のフィールドをキャッチするためです。

内側のループは最初のパスでのみ実行されるようです。これが発生するのを私が見ることができる唯一の理由は、それをテストするためのインタラクティブな例を行ったので、try/exceptです。

4

3 に答える 3

6

外側のループの最初の反復では、からすべての行を読み取りますparams。2番目の反復では、からのすべての行paramsがすでに読み取られているため、内側のループで反復するものは何も残っていません。

これを回避するには、すべてのデータセットをリストにロードしてから、そのリストを反復処理します。

reader = csv.reader(open('params.csv'), delimiter=',', skipinitialspace=True)
params = list(reader)
于 2009-12-30T21:12:44.910 に答える
1

paramsがリストであり、イテレータではないことを確認してください。

>>> s = (i for i in range(10))
>>> for ss in s: print(ss)

0
...
9
>>> for ss in s: print(ss)

# Nothing!
于 2009-12-30T21:11:55.053 に答える
0

最初のパスでリーダー バッファーが使い果たされるため、ファイルの終わりに達したため、他に読み取るものはありません。

ループの前にファイルを読み込む必要があります

于 2009-12-30T21:12:51.920 に答える