2017-07-07 54 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

相关问题