Zip CSV строка, содержащая GeoJSON в Python словарь - PullRequest
1 голос
/ 21 апреля 2019

У меня есть строка CSV со строкой GeoJSON.

str="""LC08,2016-08-02,"{'type':'Polygon','coordinates':[[[10,20],[50,40],[60,80],[15,45 ],[10,20]]]}",-9999,-9999"""

Я намереваюсь сжать эту строку в Python dict

Я попытался выполнить обычную функцию разделения и сжатия, но, очевидно, результат не такой, как ожидалось Из-за формата строки разделение является препятствием.

Вот что у меня сейчас:

x="""LC08,2016-08-02,"{'type':'Polygon','coordinates':[[[10,20],[50,40],[60,80],[15,45 ],[10,20]]]}",-9999,-9999"""

values = x.split()
print(values)

row = dict( zip(('name', 'date', 'geometry', 'value0','value1'), values))
print(row)

Я также пытался удалить символы кавычек, используя это:

values=re.sub('\r\n', '', re.sub(u'"', '', x))
values=values.split()

Это не очень помогло.

То, чего я хочу достичь, это

{
 name:"LC08", 
 date:"2016-08-02", 
 geometry:"{'type':'Polygon','coordinates':[[[10,20],[50,40],[60,80],[15,45 ],[10,20]]]}",
 value0:"-9999",
 value1:"-9999"
}

1 Ответ

2 голосов
/ 21 апреля 2019

То, что вы (вероятно) хотите, это расщепление с помощью регулярных выражений, точнее с модулем regex:

import regex as re

string = """LC08,2016-08-02,"{'type':'Polygon','coordinates':[[[10,20],[50,40],[60,80],[15,45 ],[10,20]]]}",-9999,-9999"""

rx = re.compile(r"""\{[^{}]+\}(*SKIP)(*FAIL)|,""")

d = {}
d['name'], d['date'], d['geometry'], d['value0'], d['value1'] = rx.split(string)
print(d)

, что дает

{'name': 'LC08', 'date': '2016-08-02', 'geometry': '"{\'type\':\'Polygon\',\'coordinates\':[[[10,20],[50,40],[60,80],[15,45 ],[10,20]]]}"', 'value0': '-9999', 'value1': '-9999'}

См. демо на regex101.com для выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...