来自csv的折线 - 与字符串文字不同的行为

时间:2017-07-07 20:51:04

标签: python python-3.x csv encoding google-polyline

我阅读了很多关于编码的SO主题,以了解我的代码有什么问题,但我仍然坚持。

我想解码我在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[STEFGJKRONUVSTkAtAiAlAsA~Ag@p@[^[`@e@p@KTSVU\\GHGNEHEHCFAFAFAFAPAP?N?B@T@V@R@F"

请注意,此处它只出现一个反斜杠而且没有反引号 - 可能是类似的编码问题?

任何帮助都会受到赞赏,特别是解释为什么字符串文字的行为与字符串变量的行为不同。

2 个答案:

答案 0 :(得分:2)

这应该可以解决您的问题

  ''   u 1:(1.5):(g(($1),($2)) > 0 ? f($1) : -1/0) w impulse lw 5

答案 1 :(得分:0)

我遇到了类似的问题,然后意识到折线包含海拔字段,因此,如果要获取x,y,z,则应使用参数is3d = True。

decoded = polyline.decode(encoded_polyline,is3d=True)