Lassen Sie Python-Codeblöcke ihre Ergebnisse als Org-Tabellen formatieren

Sep 21 2020

Der Kontext

In #+BEGIN_SRCCodeblöcken, deren Sprache cppoder ist sh, wird das Tabulatorzeichen als Trennzeichen für Zellen verwendet, wenn das :results tableHeader-Argument verwendet wird (siehe Beispiele unten).

#+begin_src cpp :results replace output table
#include <iostream>

int main() {
  std::cout << "a\ta\nbbbbb\tbbbbb" << std::endl;
  return 0;
}
#+end_src

#+RESULTS:
| a     | a     |
| bbbbb | bbbbb |
#+begin_src sh :results replace output table
printf "%s\t%s\n" "a" "a" "bbbbbb" "bbbbbb"
#+end_src

#+RESULTS:
| a      | a      |
| bbbbbb | bbbbbb |

Das gleiche Verhalten ist jedoch in pythonCodeblöcken nicht vorhanden (siehe unten).

#+begin_src python :results replace output table
print("a\ta\nbbbbb\tbbbbb")
#+end_src

#+RESULTS:
: a a
: bbbbb bbbbb

Die Frage

Wie kann ich die Ausgabe von pythonCodeblöcken als Org-Tabellen anzeigen lassen? Verwenden Sie diese Header-Argumente nicht und stellen Sie #+RESULTSsicher, dass die Ausgabe Tabulatorzeichen enthält , die als Org-Tabelle formatiert werden können?

Antworten

9 serycjon Sep 21 2020 at 17:48

Sie können formatierte Organisationstabellen ausgeben, indem Sie eine Liste von Listen wie folgt zurückgeben (Hinweis Nr.: Ergebnisausgabe):

#+begin_src python :results replace table
return (('a', 'a'), None, ('bbbbb', 'bbbbb'))
#+end_src

#+RESULTS:
| a     | a     |
|-------+-------|
| bbbbb | bbbbb |

Eine Zeile Keine erstellt eine Trennlinie.

Hier sind einige andere Beispiele mit :results output

#+BEGIN_SRC python :results output table
print([['Number', 'Number * 10'], None, [1, 10], [2, 20]])
#+END_SRC

#+RESULTS:
| Number | Number * 10 |
|--------+-------------|
|      1 |          10 |
|      2 |          20 |
#+BEGIN_SRC python :results value table
return [['Number', 'Number * 10'], None, [1, 10], [2, 20]]
#+END_SRC

#+RESULTS:
| Number | Number * 10 |
|--------+-------------|
|      1 |          10 |
|      2 |          20 |

Beachten Sie, dass bei Verwendung :results outputeine einzelne printim #+RESULTSCodeblock enthalten ist.

#+BEGIN_SRC python :results output table
for i in range(5):
  print([i, i**10])
#+END_SRC

#+RESULTS:
| 0 | 0 |