2017-07-07 44 views
1

我讀了很多關於編碼的SO主題,以瞭解我的代碼有什麼問題,但我仍然陷入困境。來自csv的多義線 - 與字符串文字不同的行爲

我想解碼我在csv文件中的Google多段線。我正在使用可以正常工作的折線庫。問題是,當我從csv讀取它們時,某些來自csv的行無法處理,但是當我只是將該折線作爲字符串文字傳遞時,它可以正常工作。我認爲這是一些編碼問題,因爲出現問題的多段線有兩個連續的反斜槓和/或反斜槓。

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讀取它時出現錯誤(byte = ord(value [index]) - 63 IndexError:string index out of range)。沒有反斜槓的行可以正常處理。 – rstk

回答

0

這應該解決您的問題

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

謝謝!我只是碰到另一個SO主題的解決方案,試了一下,它的工作!我以爲我已經在幾個小時前嘗試過了,但我想我用「\\」來「」(真正的基本錯誤),然後當它不工作時,我開始認爲它一定是一些編碼問題,花了很多時間在野雁追逐:) – rstk

+0

沒問題,很高興你得到它的工作 – DJK

相關問題