Thư viện chuyển đổi chuỗi đầu ra Python thành cấu trúc dữ liệu Elisp?


7

Nói rằng tôi đánh giá mã Python sau:

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)]

Tôi muốn chuyển đổi chuỗi đầu ra, đơn giản là đầu ra in của Python, sang cấu trúc dữ liệu Elisp. Vì vậy, tôi cần một chức năng foo làm điều này:

(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))

Mặc dù không khó để viết một phiên bản foohoạt động cho trường hợp cụ thể này, tôi tự hỏi liệu có một thư viện thực hiện việc này theo cách chung chung, tức là nó có thể xử lý bất kỳ cấu trúc Python phức tạp nào.

Câu trả lời:


8

Sử dụng JSON, không phải cú pháp Python

Những gì bạn đang tìm kiếm json.ellà một phần của Emacs.

Lưu ý rằng nó sẽ không đọc định dạng Python OOTB; có ít nhất 3 vấn đề:

  1. 'foo' không được công nhận là một chuỗi
  2. từ khóa true/ false/ nullđược công nhận thay vì True/ False/None
  3. bộ dữ (1,"bar")liệu không được công nhận

Giải pháp đầy đủ sử dụng json.dumps trong Python

Python có thể dễ dàng in các cấu trúc dữ liệu của nó dưới dạng 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]]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.