테이블에 org-to-python-to-pandas의 테이블을 가져 오려고 시도한 후 다시 org에 테이블의 요소가 포함될 때 약간의 두통이 있습니다. utf-8로 인코딩 됨.org-mode에서 파이썬에 utf-8 테이블 전달하기
아래 예제에서는 파이썬에 노출 된 tbl var입니다. 나는 이것이 유니 코드가 아닌 string 타입의 파이썬 요소를 디폴트로하고 있다고 생각한다.
다음은 pandas 데이터 프레임으로 가져옵니다 (이것은 구현 세부 사항이지만 의심 스럽습니다). str 유형입니다. 팬더는 요소가 아닌 UTF-8 요소로 ASCII 문자열을 얻고 생각하기 때문에
#+NAME: TBL...
#+BEGIN_SRC python :preamble "# -*- coding: utf-8 -*-" :results raw :var tbl=TBL :colnames no
import orgtools as ot
df = ot.org2df(tbl)
return ot.df2org(df)
#+END_SRC
, 나는 나 자신이 UTF-8로 설정 한 각 요소를 반복하지만 휴식하지 않도록 다음 ASCII로 다시 인코딩 할 필요 발견 판다가 이미 만들었던 유형 가정. 이 작동하지만 분명히 비 ASCII 문자가 느슨해지며 추한 것입니다. 아래를 참조하십시오.
내 질문은 : 각 테이블 요소 내에 포함 된 데이터가 ASCII 문자열이 아닌 파이썬 유니 코드 UTF-8로 올바르게 인코딩 된 방식으로 var tbl = TBL을 파이썬으로 전달하는 방법이 있습니까?
필자는 이것이 사실이라면 tabluate 라이브러리를 사용하여 org 테이블로 다시 변환하려고 시도 할 때 오류가 발생하지 않을 것이라고 생각합니다. tabulate 라이브러리는 ASCII로 내 재 인코딩을 사용하지 않고 던졌습니다.하지만이 문제는 tabulate와는 다르지만, var가 제공하는 입력이 문자열로 입력되었지만 실제로는 utf-8이 포함 된 것으로 생각하지 않습니다.
import pandas as pd
from tabulate import tabulate
from unicodedata import normalize
# Required to use Tabulate library on Org Tables with Unicode characters
def removeUnicode(item):
if isinstance(item, basestring):
return normalize('NFKD', item.decode('utf_8')).encode('ascii','ignore')
else: return item
# Convert an Org table, stored in a var in a python src block to a Pandas Dataframe
def org2df(orgTblVar):
return pd.DataFrame(orgTblVar[1:],columns=orgTblVar[0]).applymap(removeUnicode)
# Convert a Pandas DataFrame to an Org table
def df2org(df):
return tabulate(df, list(df), showindex=False, floatfmt=".8f", tablefmt="orgtbl")
저는 파이썬 2.7과 emacs24를 사용하고 있습니다.
감사합니다.
UPDATE는
그것은 완전한 대답이 아니다하지만 표로 소유자 중 하나를 사용하여이 문제를 논의하는 데, 나는 더불어 dataframe에 UTF-8 디코딩을 수행하여 유니 코드를 보존 할 수 있습니다 보여 주었다 UTF-8은 Tabulate의 실제 출력을 인코딩합니다. 문제는 Tabulate와는 아무 관련이 없습니다!
이것은 문자를 올바르게 보존하므로 유니 코드를 제거하는 원래의 해결책보다 낫습니다.
Org-Babel에서 입력 및 출력 모두에 문자 인코딩을 지정할 수 있다면 좋겠지 만 다른 사람이 언급하지 않는 한 가능하지 않다고 생각합니다.
은 내부를 보여 조직/파이썬에서의 토론과 디버그 세션 여기를 참조하십시오 :
Discussion of issue on BitBucket
프리 앰블은 다음을 처리해야합니다. : : preamble "# - * - coding : utf-8 - * -" – Phil
또한이 코드는 실제 파이썬 스크립트 자체의 인코딩만을 제어한다고 생각합니다. 이맥에서 전달 된 var의? – Phil
예, 죄송합니다. 너의 문제는 내가 넘어서 뭔가를 생각 나게했지만 거기에 하드 코딩 된 문자열이 있었다. –