2016-07-20 36 views
-1

私は住所のリストを持っており、GeoPyを使って私は経度と緯度を取得しています。すべてがうまくいきますが、今度は同じCSVファイルに経度と緯度を挿入したいので、8番目の列の緯度と9番目の列の経度を入れてください。Pythonを使用して特定のcsv列に書き込む

AREA, ADDRESS1, ADDRESS2, ADDRESS3, ADDRESS4, ADDRESS7, LATITUDE, LONGITUDE 
NORRKÖPING, Fridtunga, 602 28, Norrköping,SE   
NORRKÖPING, Björnatan gata 131, 603 77, Norrköping,SE 

上記は、私が情報を抜き出しているcsvファイルです。私は最後の部分は、私が把握することはできません一部である

彼らと
from geopy.geocoders import Nominatim 
import csv 

geolocator = Nominatim() 

with open('test.csv', 'r') as in_file: 
reader = csv.reader(in_file) 
for row in reader: 
    adress1 = row[3] 
    adress2 = row[5] 
    locaiton = geolocator.geocode(adress1 + " " + adress2) 
    if locaiton is not None and locaiton.longitude is not None and locaiton.latitude is not None: 
     print(adress1 + " " + adress2 + " ", locaiton.latitude, locaiton.longitude) 
     out_file = open('test.csv', 'w') 
     writer = csv.writer(out_file) 
     row[6] = locaiton.latitude 
     row[7] = locaiton.longitude 
     writer.writerow(row) 

を経度と緯度をアドレス2と4を取り、取得しています。私はどうやってそれを作ることができ、それは行内で続けていくのですか?今度は、経度と緯度を同じ行に置き、前の行を削除します。

今csvファイルは次のようになります。

NORRKÖPING, Björnatan gata 131, 603 77, Norrköping,SE,58.5888632,16.186094499284, 

が、私はそれがどのように見えるしたいと思います:

NORRKÖPING, Fridtunga, 602 28, Norrköping,SE, 58.5649201, 16.217851   
NORRKÖPING, Björnatan gata 131, 603 77, Norrköping,SE,58.5888632,16.186094499284, 
+0

あなたのcvsファイルは正しいですか?私はNumpyでスクリプトを書くことができましたが、最初の行に8列、次に5つの要素が表示されました – Deadpool

+0

ええ、正しいのは最初の列をコピーできませんでした。私はnumpyやPandasをインストールしようとする可能性がありますが、私はすでにプログラムの最初の半分を持っています。 – Jan

+0

各反復で 'test.csv'ファイルを上書きしています。これは、オープンモードが「w」であるためです。イテレーションを開始する前に、出力ファイルを開いてライターを作成する必要があります。 '行'が初期化された直後。 – frist

答えて

0

あなたがものを追加しているときは、所定の位置にファイルを変更すべきではありません。 Check this question for that dicussion.ただし、希望する出力を持つ新しいファイルを作成することができます。

コードが正常に動作していると仮定して、これを試してみてください。私は数行を並べ替えました。

from geopy.geocoders import Nominatim 
import csv 

geolocator = Nominatim() 

with open('test.csv','r') as in_file: 
    reader = csv.reader(in_file) 
    out_file = open('out.csv', 'w') 
    writer = csv.writer(out_file) 
    for row in reader: 
     adress1 = row[3] 
     adress2 = row[5] 
     locaiton = geolocator.geocode(adress1 + " " + adress2) 
     if locaiton is not None and locaiton.longitude is not None and locaiton.latitude is not None: 
      print(adress1 + " " + adress2 + " ", locaiton.latitude, locaiton.longitude) 
      row.append(locaiton.latitude) 
      row.append(locaiton.longitude) 
      writer.writerow(row) 
+0

今すぐmy code atleastが座標を出力し、正しい列の最初の行に追加します。それは以前のものを削除し続けます。あなたはたぶんそれを下向きに続ける方法を知っていますか? – Jan

+0

質問を編集して、どの出力ファイルのサンプルを表示できますか?私はあなたが以前のものを削除することによって何を意味するかを完全に理解していません。私が掲示したコードを試してみて、これがどんな結果を出すのか見てみましょう。 – Wajahat

+0

ええ、私は出力を編集しました。 1行下に移動するのではなく、以前のアドレスを上書きすることを念頭に置いています。残念ながら、あなたのコードは空白を返して、csvファイルの情報を削除します。 – Jan

関連する問題