Python이 조직 문서에서 조직 스키마 테이블을 추출할 수 있습니까?

Python이 조직 문서에서 조직 스키마 테이블을 추출할 수 있습니까?

지정된 테이블을 읽기 위해 Python 코드를 작성하려고 합니다.조직 모델문서. 예를 들어 파일이 있습니다.~/foo.org

$ cat ~/foo.org
#+Title: Example Org Document

* Section One

Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus.

#+TBLNAME: table1
| i     | want    | python | to     |
|-------+---------+--------+--------|
| read  | this    | table  | only   |
| 1     | 3       | 2      | 4      |
|-------+---------+--------+--------|
| i     | want    | the    | dashed |
| lines | ignored | by     | python |

#+TBLNAME: table2
|    i | don't |  need | python | to |
|------+-------+-------+--------+----|
| read |  this | table |      9 |  8 |
|    7 |     6 |     5 |      4 |  3 |
|    2 |     1 |     0 |     22 | 17 |

내 파일이 덜 복잡하다면 다음과 같이 말하세요.

$ cat ~/bar.org
| i     | want    | python | to     |
| read  | this    | table  | only   |
| 1     | 3       | 2      | 4      |
| i     | want    | the    | dashed |
| lines | ignored | by     | python |

그런 다음 테이블을 Python으로 읽을 수 있습니다.

import csv
csv.DictReader(open('~/bar.org'), delimiter='|')

더 복잡한 테이블에서 원하는 테이블을 구문 분석하는 방법이 있습니까 ~/foo.org?

답변1

원하는 입력 형식을 제어하는 ​​경우 가장 간단한 방법은 전체 파일을 Python으로 읽고 정규식을 사용하여 관심 있는 테이블을 추출한 다음 이를 csv로 전달하는 것입니다.

import csv, re
data = open("foo.org").read()
mo = re.search("TBLNAME: table1\n.*?\n(\n|$)", data, re.S)
mytable = mo.group(0)
d = csv.DictReader(mytable.splitlines(), delimiter='|')

mytable예를 들어 여기에 표시할 행을 분할하여 문자열을 csv 판독기의 반복 가능 항목으로 변환해야 합니다 .

답변2

Python 함수를 작성하여 첫 번째 및 마지막 문자가 "|"인 행을 읽고 테이블(각 항목이 테이블의 행인 목록 개체일 수 있음)에 추가할 수 있습니다.

테이블이 여러 개 있는 경우 "|"로 시작하지 않는 줄은 "테이블 끝" 힌트입니다.

관련 정보