2

ネストされたループに問題があります。出力を取得していますが、データ セット内のフィールド数に対して各出力が複製されています。

for dat in data_body:
    x = float(dat[5])
    y = float(dat[6])
    point = ogr.Geometry(ogr.wkbPoint)
    point.AddPoint(x,y)
    feature.SetGeometry(point)
    for i, d in enumerate(dat):
        for j, field in enumerate(new_fields):
            if i == j:
                feature.SetField(field, d)
                layer.CreateFeature(feature)

私のデータセットでは、リストのリストdata_bodyには 13 行のデータと 55 列 (つまり 55 の位置) があります。私のリストnew_fieldsには、リストのリストの列に対応する 55 個の値がdata_bodyあります。したがって、 object のコード ブロックではfeature.SetField(field, d). 行が互いに一致する限り、 data_body の各値を各一意のフィールドに対応させる必要がありiますj。ただし、代わりに、 の値に対応する列の値に対応する 13 行のデータを含むオブジェクトを取得しますnew_fields。13 * 55 の値、つまり 715 行が得られ、データの約 50% で値が欠落しています。出力データ テーブルは、三角形のデータのように見えます。

私の質問が理にかなっているのかどうかはわかりませんが、もしそうなら、ネストされたループ戦略に関する助けがあれば助かります。私の問題は、ループが実際に行っていることと、ifステートメントが行っている可能性があることの概念化だと思います。

4

1 に答える 1

2

avasal が言ったように、dat と new_fields を同時に反復したい場合、これを行う最も簡単な方法は次を使用することzipです。

for d, field in zip(dat, new_fields):
    feature.SetField(field, d)
    layer.CreateFeature(feature)
于 2012-11-20T05:58:11.480 に答える