2017-07-07 10 views
1

私のコードで何が問題なのかを知るためにエンコーディングに関する多くのSOトピックを読みましたが、まだ固執しています。csvのポリライン - 文字列リテラルとは異なる動作

私はcsvファイルにあるGoogleのポリラインをデコードしたいと思います。私はうまく動作するポリラインライブラリを使用しています。問題は、csvの一部の行をCSVから読み込んだときに処理できないということですが、そのポリラインを文字列リテラルとして渡すだけで問題なく動作します。問題を作るポリラインには2つの連続するバックスラッシュやバッククォートがあるので、エンコードの問題だと思います。

import csv 
import polyline 

INPUT_FILE = 'sample_input.csv' 

csv.register_dialect(
    'mydialect', 
    delimiter = ',', 
    quotechar = '"', 
    doublequote = True, 
    skipinitialspace = True, 
    quoting = csv.QUOTE_ALL) 

with open(INPUT_FILE, 'r', encoding="utf-8") as csv_file: 

    read = csv.reader(csv_file, dialect='mydialect') 

    header = next(read, []) 

    for row in read: 

     site_id = row[0] 
     encoded_polyline = row[1] 

     print(site_id) 

     try: 
      decoded = polyline.decode(encoded_polyline) 
      print(decoded) 
     except: 
      print(encoded_polyline) 

     print() 

サンプルポリラインがある:

"dk`mEg}jx[[email protected]@[^[`@[email protected]@KTSVU\\[email protected]@[email protected]@F" 

ここで、それはまた、唯一のバックスラッシュとバッククォートなしで表示されていることを注意してください - おそらく同様のエンコーディングの問題を?

特に、文字列リテラルの動作が文字列変数と同じでない理由については、何か助けてください。

+0

あなたがエラーを取得しているあなたの問題を解決する必要がありますか?私はちょうど問題なしで文字列を実行しました。 – DJK

+0

この文字列をpolyline.decode関数に渡すと問題はありませんが、csvから読み取ったときにエラー(バイト= ord(値[インデックス]) - 63 IndexError:文字列インデックスが範囲外です。バックスラッシュのない行は大丈夫に処理されます。 – rstk

答えて

0

これはポリラインをデコードするとき

decoded = polyline.decode(encoded_polyline.replace('\\\\','\\')) 
+0

ありがとう!私はちょうど別のSOトピックでその解決策にぶつかり、試してみました。私はすでに数時間前に試したと思っていましたが、 "\"を "\"(本当に基本的な間違い)に使用していて、動作していないときにエンコーディングに問題があると思って、野生のガチョウの追跡で時間: – rstk

+0

問題ない、うれしい – DJK

関連する問題