2017-05-15 5 views
-3

私の究極の目標は、すでに作成されたcsvファイルからmy longをlongにして配列にし、shpファイルにポリゴンを作成することです。 10個のポリゴンを作成できるレコードが10個あります。取り組む方法を知らない私の問題は、csvファイルの操作です。 1つのポリゴンに関連付けられたすべての緯度経度は、1つのフィールド(セル)にあります。すなわち:私の列名は "lat_long"であり、その中に15個以上の数字がただ一つのフィールドにあります。毎週2つの数字のように書かれたポリゴンのポイントの緯度、長いを表します2089,15663,2103,15664など。csvファイルから配列を作成します。データはすべて1つのフィールドにあります

私のデータは次のようになります。

サンプルlat_longチェックPROD

1 2071、15600、2089、15663、2103 15664 WFCクラッシュ

2 2071、15601、2089、15663、2104,15660 QPFリンゴ

3 1981、15541、2005、15571、2028、15570アストロトマト

私はそれが次のようになりたい:

サンプル緯度ロングチェックPROD

1 20.71 -156 WFCクラッシュ

1 20.89 -156.66 WFCクラッシュ

1 21.03 -156.64 WFCクラッシュ

2 20.71 -156.01 QPFリンゴ

2 20.89 -156.63 QPFリンゴ

2 21.03 -156.64 QPFリンゴ

3 19.81 -155.41アストロトマト

3 20.05 -155.71アストロトマト

3 20.28 -155.7アストロトマト

+0

こんにちはそして歓迎。現在の状態でのあなたの質問は非常に不明であり、人々があなたを助けるのは難しいです。 csvとコードとcsvとの関係など、関連するすべての部分を投稿してください。 [最小限で完全であり、検証可能な例(MCVE)]を投稿する(http://stackoverflow.com/help/mcve ) があなたの問題を実証すると、より良い回答が得られるでしょう。 –

+1

読み込み済みのファイルを '、'で分割することはできますが、データを見ると、値が負であるか正であるかをどのように知ることができますか? csvファイルはどのように作成されましたか?変更するのがより簡単で信頼できるようにしてください。 – Craicerjack

+1

だから '2089,15663'は'(20.89、-156.63) 'となります。しかし、 ' - 'はマイナス?その '15663'はどのように否定的ですか? –

答えて

0
import csv 


# Open a new csv to write to 
with open("output.csv", "w", newline='') as out_file: 
    writer = csv.writer(out_file) 

    # Write the header row 
    writer.writerow(['Sample', 'lat', 'long', 'check', 'prod']) 

    # Open the source .csv file. You'll need it 
    # to be in the same directory as this script. 
    with open("data.csv", newline='') as in_file: 
     csv_reader = csv.reader(in_file) 

     row_num = 0 
     for row in csv_reader: 
      # Skip the header row of the input data 
      if row_num > 0: 
       num_columns = len(row) 

       sample = int(row[0]) 
       check = row[num_columns - 2] 
       prod = row[num_columns - 1] 

       # Loop through the columns by 2 columns at a time 
       for col in range(1, num_columns - 2, 2): 
        # Get the raw lat long data 
        raw_lat = row[col] 
        raw_lng = row[col + 1] 

        # Split the lat into components and parse as a float 
        lat = float(raw_lat[0:-2] + '.' + raw_lat[-2:]) 

        # Split the long into components and parse as a float 
        lng = float(raw_lng[0:-2] + '.' + raw_lng[-2:]) 

        out_row = [sample, lat, lng, check, prod] 
        writer.writerow(out_row) 

      row_num += 1 
関連する問題