Python出力文字列をElispデータ構造に変換するライブラリ?


7

次のPythonコードを評価するとします。

import inspect
import scipy.ndimage.filters

list (inspect.getargspec (scipy.ndimage.filters.gaussian_filter1d))
# => [['input', 'sigma', 'axis', 'order', 'output', 'mode', 'cval'],
#      None, None, (-1, 0, None, 'reflect', 0.0)]

単純にPythonの印刷出力である出力文字列をElispデータ構造に変換したいと思います。だから私foo はこれを行う関数が必要です:

(foo "[['input', 'sigma', 'axis', 'order', 'output', 'mode', 'cval'], None, None, (-1, 0, None, 'reflect', 0.0)]")
;; =>
;; (("input"
;;   "sigma"
;;   "axis"
;;   "order"
;;   "output"
;;   "mode"
;;   "cval")
;;  nil
;;  nil
;;  (-1 0 nil "reflect" 0.0))

fooこの特定のインスタンスで機能するバージョンを作成することは難しくありませんが、これを汎用的な方法で実行する、つまり複雑なPython構造を処理できるライブラリがあるかどうか疑問に思います。

回答:


8

Python構文ではなくJSONを使用する

あなたが探しているのはjson.elEmacsの一部です。

Python形式OOTBを読み取らないことに注意してください。そこにある少なくとも 3つの問題は:

  1. 'foo' 文字列として認識されません
  2. キーワードtrue/ false/のnull代わりに認識されるTrue/ False/None
  3. タプル(1,"bar")は認識されません

Pythonでjson.dumpsを使用する完全なソリューション

Pythonはデータ構造をJSONとして簡単に出力できます

(require 'json)
(require 'python)
(json-read-from-string
 (substring
  (python-shell-send-string-no-output
   "import inspect, json; json.dumps (inspect.getargspec (json.dumps))"
   (run-python))
  1 -1))
==>
[["obj" "skipkeys" "ensure_ascii" "check_circular" "allow_nan"
  "cls" "indent" "separators" "encoding" "default" "sort_keys"]
 nil "kw" [:json-false t t t nil nil nil "utf-8" nil :json-false]]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.