Я следовал этому SO-решению , чтобы вызвать python из golang и захватить возврат из кода go для декодирования простого csv и преобразования в json.
Это работает из cli как команда:
$ python3.7 -c "exec(\"import csv,json \na=list() \nfor i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)) \nb=dict(enumerate(a)) \nc=json.dumps(b, sort_keys=True, indent=4) \nprint(c)\")"
С Golang команда установлена следующим образом:
cmd := exec.Command("python", "-c", "import csv,json; a=list(); for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)); b=dict(enumerate(a)); c=json.dumps(b, sort_keys=True, indent=4); print(c)")
Однако я получаю следующую ошибку:
exit status 1
File "<string>", line 1
import csv,json; a=list(); for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)); b=dict(enumerate(a)); c=json.dumps(b, sort_keys=True, indent=4); print(c)
^
SyntaxError: invalid syntax
Я думаю, что мне нужно отодвинуть отступ обратно к for для l oop, но как это возможно из строковой команды?
заранее спасибо.
ОБНОВЛЕНИЕ:
Ниже приведен рабочий python эквивалент, строка, присваивающая переменную c
, должна располагаться вдоль for loop
a = list()
for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')):
a.append(json.dumps(i))
c = json.dumps(dict(enumerate(a)), sort_keys=True, indent=4)
print(c)