Python 制作藏头诗生成器(超详细)
获取数据
网上有一位大神收集了好几万条古诗,我们通过这个来生成藏头诗
文件下载链接(Github):点击下载
然后打开文件夹里面会有很多.json文件,然后我们需要用Python提取我们想要的古诗并且写入到文件中
步骤:
- 遍历所有子文件夹,然后将.json文件路径保存到数组里
- 打开并读取.json文件
- 获取古诗每一个诗句
- 检测古诗是不是五言或七言
- 将需要的古诗写入文件
代码如下:
import os
import json
# 遍历所有子文件夹下包含文件后缀的函数
def findAllFilesWithSpecifiedSuffix(target_dir, target_suffix="txt"):
find_res = []
target_suffix_dot = "." + target_suffix
walk_generator = os.walk(target_dir)
for root_path, dirs, files in walk_generator:
if len(files) < 1:
continue
for 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("chinese-poetry-master","json")
# 打开要写入的文件,这里分为两种类型,五言和七言,以便于生成特定长度的藏头诗
f111 = open('poem_5.txt', 'w', encoding = "utf-8")
f11 = open('poem_7.txt', 'w', encoding = "utf-8")
cnt=0
for i in fa:
f = open(i,'r',encoding='utf-8')
# json.load() 这种方法是解析一个文件中的数据
m = json.load(f)
for j in m:
# 变量kkk是用于检测该条json数据是否包含古诗,看一下古诗.json文件的结构可以得知
kkk=None
try:
kkk=j['content']
except:
try:
kkk=j['paragraphs']
except:
pass
if kkk!=None:
cnt+=1
if 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 = 0
for i in c:
for j in f:
if b == "藏头":
if j[0] == i:
output_d += 1
print(j, end = "")
if output_d % 2 == 0:
print("。")
else:
print(",")
break
else:
if j[-1] == i:
output_d += 1
print(j, end = "")
if output_d % 2 == 0:
print("。")
else:
print(",")
break
今天的文章Python 制作藏头诗生成器(超详细)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/66787.html