1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Python 制作藏头诗生成器(超详细)

Python 制作藏头诗生成器(超详细)

时间:2020-05-12 23:48:46

相关推荐

Python 制作藏头诗生成器(超详细)

Python 制作藏头诗生成器(超详细)

获取数据

网上有一位大神收集了好几万条古诗,我们通过这个来生成藏头诗

文件下载链接(Github):点击下载

然后打开文件夹里面会有很多.json文件,然后我们需要用Python提取我们想要的古诗并且写入到文件中

步骤:

遍历所有子文件夹,然后将.json文件路径保存到数组里打开并读取.json文件获取古诗每一个诗句检测古诗是不是五言或七言将需要的古诗写入文件

代码如下:

import osimport json# 遍历所有子文件夹下包含文件后缀的函数def findAllFilesWithSpecifiedSuffix(target_dir, target_suffix="txt"):find_res = []target_suffix_dot = "." + target_suffixwalk_generator = os.walk(target_dir)for root_path, dirs, files in walk_generator:if len(files) < 1:continuefor file in files:file_name, suffix_name = os.path.splitext(file)if suffix_name == target_suffix_dot:find_res.append(os.path.join(root_path, file))return find_res# 调用函数fa=findAllFilesWithSpecifiedSuffix("C:/Users/shenyutong/Desktop/chinese-poetry-master","json")# 打开要写入的文件,这里分为两种类型,五言和七言,以便于生成特定长度的藏头诗f111 = open('poem_5.txt', 'w', encoding = "utf-8")f11 = open('poem_7.txt', 'w', encoding = "utf-8")cnt=0for i in fa:f = open(i,'r',encoding='utf-8')# json.load() 这种方法是解析一个文件中的数据m = json.load(f)for j in m:# 变量kkk是用于检测该条json数据是否包含古诗,看一下古诗.json文件的结构可以得知kkk=Nonetry:kkk=j['content']except:try:kkk=j['paragraphs']except:passif kkk!=None:cnt+=1if cnt%10000==0:print("正在获取古诗... 计数:",cnt)for each_poem in kkk:'''判断古诗是七言还是五言,这里有些复杂,判断过程如下:首先判断 古诗是否有两段(列如XXXXX,XXXXX。)并且两半字数是否相等(列如XXXXX,XXXXX。就是相等的,XXX,XXXXX。就是不相等的)然后判断 古诗是五言(含符号12字)还是七言(含符号16字)最后分别写入到指定的文件'''if len(each_poem.split(",")) == 2 and len(each_poem.split(",")[0]) == len(each_poem.split(",")[1].replace("。", "")):if len(each_poem) == 12:f111.write("\n")f111.write(each_poem.split(",")[0] + "\n" + each_poem.split(",")[1].replace("。", ""))elif len(each_poem) == 16:f11.write("\n")f11.write(each_poem.split(",")[0] + "\n" + each_poem.split(",")[1].replace("。", ""))f111.close()f11.close()

生成藏头诗

生成过程:

遍历输入字符(i)遍历古诗列表(j)判断古诗的第一个(如果是藏尾的话就是最后一个)与i是否相等如果相等则输出该句加上标点并break

代码如下:

a = input("请输入您想生成的藏头诗字数(五言/七言): ")while not a in ['五言', '七言']:print("输入有误,请重新输入")a = input("请输入您想生成的藏头诗字数(五言/七言): ")b = input("请输入您想生成的类别(藏头/藏尾): ")while not b in ['藏头', '藏尾']:print("输入有误,请重新输入")b = input("请输入您想生成的藏头诗字数(藏头/藏尾): ")c = input("请输入您想藏头的话: ")while not c:print("输入有误,请重新输入")c = input("请输入您想生成的藏头诗字数(藏头/藏尾): ")if a == "五言":f = open("poem_5.txt", "r", encoding = "utf-8").read().split("\n")else:f = open("poem_7.txt", "r", encoding = "utf-8").read().split("\n")output_d = 0for i in c:for j in f:if b == "藏头":if j[0] == i:output_d += 1print(j, end = "")if output_d % 2 == 0:print("。")else:print(",")breakelse:if j[-1] == i:output_d += 1print(j, end = "")if output_d % 2 == 0:print("。")else:print(",")break

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。