지정된 테이블을 읽기 위해 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 함수를 작성하여 첫 번째 및 마지막 문자가 "|"인 행을 읽고 테이블(각 항목이 테이블의 행인 목록 개체일 수 있음)에 추가할 수 있습니다.
테이블이 여러 개 있는 경우 "|"로 시작하지 않는 줄은 "테이블 끝" 힌트입니다.