1

基本的に次の形式の何千ものデータのコレクションである複数セクションのテキスト ファイルがあります。

psxy -R -Jm -N -G0/19/255 -K -O <<eof>> image.ps
   64.0100  28.0100
   64.0400  28.0100
   64.0700  28.0100
   64.1000  28.0100
   64.1400  28.0100
   64.1700  28.0100
   64.2000  28.0100
   64.2300  28.0100
   64.2600  28.0100
   64.2600  28.0400
   64.2600  28.0700
   64.2600  28.1000
   64.2600  28.1400
   64.2600  28.1700
   64.2600  28.2000
   64.2600  28.2300
   64.2600  28.2600
   64.2300  28.2600
   64.2000  28.2600
   64.1700  28.2600
   64.1400  28.2600
   64.1000  28.2600
   64.0700  28.2600
   64.0400  28.2600
   64.0100  28.2600
   64.0100  28.2300
   64.0100  28.2000
   64.0100  28.1700
   64.0100  28.1400
   64.0100  28.1000
   64.0100  28.0700
   64.0100  28.0400
   64.0100  28.0100
eof
 #   1

最初の行はユーティリティ GMT (Generic Mapping Tools) を呼び出します。これらの各セクションは、タグimage.psの RGB 値で指定された色を持つ色付きの多角形としてファイルにプロットされます。各セクションはと のラベル ( )-Gで終わります。eof# 1

-G基本的に、タグから分割された個々の RGB 値用の配列と、ポリゴン頂点の個別のセット用の 2 つの別個の配列を使用できるようにしたいと考えています。最終的な目標は、さまざまな matplotlib/basemap ツールを使用して (GMT を使用せずに) これらのポリゴンをプロットすることです。

これは可能ですか?他の投稿で、より単純な書式設定が可能であることを見てきましたが、私は Python に少し慣れていません。

ありがとうございました。

4

1 に答える 1

1

私はこのようなことをします:

import re

polygons = []

with open('inputfilename') as datafile:
    for line in datafile:

        if 'psxy' in line:
#This is the beginning of a new polygon. Start with an empty set of points
#and parse out the color, and store it in a tuple
            points = []
            m = re.search('-G([\d\.]+)/([\d\.]+)/([\d\.]+) ', line)
            r,g,b = m.group(1,2,3)
            r = int(r)
            g = int(g)
            b = int(b)
            color = (r,g,b)

        elif 'eof' in line:
#This is the end of a polygon. Take the list of points, and the last color
#put them in a tuple and append that to the list of polygons
            polygons.append((points, color))

        elif '#' in line:
#do nothing with this line
            pass

        else:
#This is a pair of x,y coordinates. Turn them into floats, put them in a tuple
#and append the tuple to the list of points for this polygon.
            x,y = line.split()
            x = float(x)
            y = float(y)
            points.append((x,y))


#Now to plot the polygons
for poly in polygons:
    drawPolygon(poly[0], poly[1])

これは、エラー チェックを行わない非常に単純な例です。入力ファイルの構文が予期しないことをすると、壊れます。また、タイプミスやその他のバグがある場合があります。壊れた場合は、すべてのピースを保持できます。:)

于 2013-11-05T21:14:51.587 に答える