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

Python 制作藏头诗生成器(超详细),第1张

Python 制作藏头诗生成器(超详细) Python 制作藏头诗生成器(超详细) 获取数据

网上有一位大神收集了好几万条古诗,我们通过这个来生成藏头诗
文件下载链接(Github):点击下载
然后打开文件夹里面会有很多.json文件,然后我们需要用Python提取我们想要的古诗并且写入到文件中
步骤:

  1. 遍历所有子文件夹,然后将.json文件路径保存到数组里
  2. 打开并读取.json文件
  3. 获取古诗每一个诗句
  4. 检测古诗是不是五言或七言
  5. 将需要的古诗写入文件
    代码如下:
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("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=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()

生成藏头诗

生成过程:

  1. 遍历输入字符(i)
  2. 遍历古诗列表(j)
  3. 判断古诗的第一个(如果是藏尾的话就是最后一个)与i是否相等
  4. 如果相等则输出该句加上标点并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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5689395.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存