Zip CSV строка, содержащая словарь GeoJSON для python

#python #regex

#python #регулярное выражение

Вопрос:

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

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

Я намерен заархивировать эту строку в Python dict

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

Это то, что у меня есть в настоящее время:

 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('rn', '', 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:

То, что вы (вероятно) хотите, — это разделение с помощью регулярных выражений, точнее с 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 для выражения.

Комментарии:

1. Я запускаю это в ядре Jupyter и rx = re.compile(r"""{[^{}] }(*SKIP)(*FAIL)|,""") говорит error: nothing to repeat

2. @PranayNanda: Вы видели regex модуль ( pip install regex )? Это не работает с родным re .