python全唐诗json文件基于作者姓名检索--以李白为例
因为是边做边写的博客,文中我发现我的文学水平急待加强!
全唐诗竟然是按作者编卷的,那我做的意义在哪里???
写到一半,又不忍心删了,罢了罢了,哎~
文件来源
chinese-poetry
GitHub链接:https://github.com/chinese-poetry/chinese-poetry
单个文本分析
读取单个文本
import json
path="001.json"
f=open(path,'r',encoding='utf-8')
m=json.load(f)
print(m)
- 此处导入了json库,方便对json文件进行读取
- json.load函数将json文件转化为了python可识别的字典类型
- 注意:此处encoding需要明确,不然容易报错
结果展示,内容过长,仅显示一例
[{'title': '帝京篇十首', 'author': '李世民', 'biography': '帝姓李氏,諱世民,神堯次子,聰明英武。貞觀之治,庶幾成康,功德兼隆。由漢以來,未之有也。而銳情經術,初建秦邸,即開文學館,召名儒十八人爲學士。既即位,殿左置弘文館,悉引內學士,番宿更休。聽朝之間,則與討論典籍,雜以文詠。或日昃夜艾,未嘗少怠。詩筆草隸,卓越前古。至於天文秀發,沈麗高朗,有唐三百年風雅之盛,帝實有以啓之焉。在位二十四年,諡曰文。集四十卷。館閣書目,詩一卷,六十九首。今編詩一卷。', 'paragraphs': ['秦川雄帝宅,函谷壯皇居。綺殿千尋起,離宮百雉餘。', '連薨遙接漢,飛觀迥淩虛。雲日隱層闕,風煙出綺疏。', '岩廊罷機務,崇文聊駐輦。玉匣啟龍圖,金繩披鳳篆。', '韋編斷仍續,縹帙舒還卷。對此乃淹留,欹案觀墳典。', '移步出詞林,停輿欣武宴。雕弓寫明月,駿馬疑流電。', '驚雁落虛弦,啼猿悲急箭。閱賞誠多美,於茲乃忘倦。', '鳴笳臨樂館,眺聽歡芳節。急管韻朱弦,清歌凝白雪。', '彩鳳肅來儀,玄鶴紛成列。去茲鄭衛聲,雅音方可悅。', '芳辰追逸趣,禁苑信多奇。橋形通漢上,峰勢接雲危。', '煙霞交隱映,花鳥自參差。何如肆轍跡,萬里賞瑤池。', '飛蓋去芳園,蘭橈遊翠渚。萍間日彩亂,荷處香風舉。', '桂楫滿中川,弦歌振長嶼。豈必汾河曲,方為歡宴所。', '落日雙闕昏,回輿九重暮。長煙散初碧,皎月澄輕素。', '搴幌玩琴書,開軒引雲霧。斜漢耿層閣,清風搖玉樹。', '歡樂難再逢,芳辰良可惜。玉酒泛雲罍,蘭殽陳綺席。', '千鐘合堯禹,百獸諧金石。得志重寸陰,忘懷輕尺璧。', '建章歡賞夕,二八盡妖妍。羅綺昭陽殿,芬芳玳瑁筵。', '佩移星正動,扇掩月初圓。無勞上懸圃,即此對神仙。', '以茲遊觀極,悠然獨長想。披卷覽前蹤,撫躬尋既往。', '望古茅茨約,瞻今蘭殿廣。人道惡高危,虛心戒盈蕩。', '奉天竭誠敬,臨民思惠養。納善察忠諫,明科慎刑賞。', '六五誠難繼,四三非易仰。廣待淳化敷,方嗣雲亭響。'], 'notes': [''], 'volume': '卷一', 'no#': 1}
本文需要对姓名为李白的诗人所写的诗歌进行筛选
for item in m:
if item["author"]=="李白":
print(item["paragraphs"])
此处使用for循环,将每一条字典抽取出来,之后按照索引,把李白的诗歌提取
对全唐诗json文件进行整体分析
此处有几个小问题需要注意:
- 用for循环需要将数字转化为三位数的字符串,如将1变为001
- 注意在最前面添加for循环时的缩进问题
- 需要使用字符串添加,将“001”改变为“001.json”
代码展示
for i in range(900):
num=str(i+1).zfill(3)
path=num
path+=".json"
结果展示
['三十六離宮,樓臺與天通。閣道步行月,美人愁煙空。', '恩疏寵不及,桃李傷春風。淫樂意何極,金輿向回中。', '萬乘出黃道,千旗揚彩虹。前軍細柳北,後騎甘泉東。', '豈問渭川老,寧邀襄野童。秋暮瑤池宴,歸來樂未窮。']
此处有方括号不太利于我们以后对于诗歌进行文本分析
本文此处对代码稍加改变下
原先代码
print(item["paragraphs"])
现在代码
print(",".join(item["paragraphs"]))
结果展示
三十六離宮,樓臺與天通。閣道步行月,美人愁煙空。,恩疏寵不及,桃李傷春風。淫樂意何極,金輿向回中。,萬乘出黃道,千旗揚彩虹。前軍細柳北,後騎甘泉東。,豈問渭川老,寧邀襄野童。秋暮瑤池宴,歸來樂未窮。
将这些结果全部放入一个txt文件中
with open("libai.txt", "a") as f:
f.write("\n"+"《"+item["title"]+"》"+" "+",".join(item["paragraphs"]))
这里呢,再一次劝告兄弟们好好读书,不然写程序总在奇奇怪怪的地方浪费时间(lll¬ω¬)
《樂府雜曲:鼓吹曲辭:上之回》
我一直以为这个是乱码,调试了好半天/(ㄒoㄒ)/~~
全部代码展示
import json
for i in range(900):
num=str(i+1).zfill(3)
path=num
path+=".json"
f=open(path,'r',encoding='utf-8')
m=json.load(f)
for item in m:
if item["author"]=="李白":
with open("libai.txt", "a") as f:
f.write("\n"+"《"+item["title"]+"》"+" "+",".join(item["paragraphs"]))
print("\n"+item["title"],",".join(item["paragraphs"]))
就这样愉快的结束吧!