您好,怎么用python处理纯文本数据为二维数组?

zedgg
  • 2
新手上路,请多包涵
1. ad-表方向或加强语气
原型:ad-(在拉丁语中出现在元音或辅音d、h、j、m和v 前) 
aducir (拉丁语addūcere、英语adduce:ad-表方向+dūcere领导) tr.引证,举例(西语中只保留一个d)   
变体:ad-和除d、h、j、m、v之外的辅音字母连用时发生逆行完全同化。其变体较多,请结合"逆行完全同化"的概念记忆。
abreviar (拉丁语abbreviāre、英语abbreviate :ad-→ab-+breviāre变短)tr.缩短(西语中只保留一个b)
afiliar (拉丁语affīliāre、英语 affiliate:ad-→af-+fil?us儿子+-āre) tr. 使参加(党派,团体等)   
2. ab-分离、远离
原型:ab-
abducir (拉丁语abdūcere、英语abduce:ab-远离+duc-引导+-ir ) tr. 诱拐,绑架
abusar (拉丁语abusāre、英语abuse:ab-远离+us-使用+-ar ?远离正常的使用范围)  intr. 乱用,滥用
变体:abs-用在以c或t为首字母的词根前
absceso (拉丁语abscessus、英语abscess:ab-表示远离→abs-;ces-走?从平面中走出?凸起; ) m. 脓肿,脓疡
abstraer (拉丁语abstrahere、英语abstract:ab-远离→abs-+tra-拉,抽+-er?使抽离现实) tr. 使抽象化

请问怎么用python处理如上数据成如下JSON数据?

{
    "prefix":"ad",
    "intro":"表方向或加强语气",
    "prototype":{
        "intro":"ad-(在拉丁语中出现在元音或辅音d、h、j、m和v 前)",
        "list":[
            {"word":"aducir","meaning":"(拉丁语addūcere、英语adduce:ad-表方向+dūcere领导) tr.引证,举例(西语中只保留一个d)"}
        ]
    },
    "variation":{
        "intro":"ad-和除d、h、j、m、v之外的辅音字母连用时发生逆行完全同化。其变体较多,请结合"逆行完全同化"的概念记忆。",
        "list":[
            {"word":"abreviar","meaning":"(拉丁语abbreviāre、英语abbreviate :ad-→ab-+breviāre变短)tr.缩短(西语中只保留一个b)"},
            {"word":"afiliar","meaning":"(拉丁语affīliāre、英语 affiliate:ad-→af-+fil?us儿子+-āre) tr. 使参加(党派,团体等)"}
        ]
    }

}
{
    如上。。。
}
回复
阅读 246
1 个回答
✓ 已被采纳
import re

content = """..."""

def extract_case(text):
    return [dict(zip(["word", "meaning"], i.split(maxsplit=1))) for i in text.split("\n") if i]

exp_parts = (
    "\d+\.\s([a-z]+)-(.*?)\n"
    "原型:(.*?)\n"
    "((?:[a-z]+.*?\n)+)"
    "变体:(.*?)\n"
    "((?:[a-z]+.*?\n)+)"
)
parts = re.findall(exp_parts, content)
result = []
for part in parts:
    prefix, intro, prototype, prototype_text, variation, variation_text = part
    result.append(
        {
            "prefix": prefix,
            "intro": intro,
            "prototype": {"intro": prototype, "list": extract_case(prototype_text)},
            "variation": {"intro": variation, "list": extract_case(variation_text)},
        }
    )
你知道吗?

宣传栏