python之Bible快速检索器

内容将会持续更新,有错误的地方欢迎指正,谢谢!
 

python之Bible快速检索器
     
TechX 坚持将创新的科技带给世界!

拥有更好的学习体验 —— 不断努力,不断进步,不断探索
TechX —— 心探索、心进取!

助力快速掌握 python 开发

为初学者节省宝贵的学习时间,避免困惑!


前言:

  最近在看shengjing的时候突发奇想,能不能开发一款可以快速查询shengjing的软件,通过输入书名章:节这样的方式来快速查询,于是就开发了这款能够可以快速查询的软件。

TechX 教程效果:

在这里插入图片描述

源工程:https://gitcode.com/CTLittleNewbie/BibleQ/overview

软件下载:https://gitcode.com/CTLittleNewbie/BibleQ/releases



一、准备


在做这个软件的时候,首先考虑到要采用什么方式来获取shengjing,当时想了3种获取方式:API、爬虫和本地化文件

首先考虑使用API,就去网上找到了一个相关API,但是发现这个API不支持中文,找到的其他的API很多都不能用,而且不稳定,所以就放弃了这种方式。

后面考虑使用爬虫来爬取,找到一个shengjing的网站,但是只是个国外的网站,可能比较慢,国内可能访问不了,也就放弃了。

然后考虑使用本地化文件,看是否能下载shengjing的Json或者XML文件,于是我在github上查找,找到了xml格式的shengjing。

1、文件准备


xml格式的shengjing可以自行去下载,地址 https://github.com/gratis-bible/bible

里面包含了各种语言的版本,我这里使用中文版,下载解压后找到zh/cvs.xml文件

在这里插入图片描述

2、工程准备


新建一个python工程,目录与下面保持一致,将cvs.xml放在static文件夹中

在这里插入图片描述



二、加载本地cvs.xml


在加载cvs.xml之前还需要对cvs.xml做一些修改,打开cvs.xml,找到节点,将里面的属性全部删除掉

在这里插入图片描述
删除完成之后与下面保持一致。

在这里插入图片描述

要查询首先需要加载本地xml到内存中

	# 构建cvs.xml的路径
  bible_xml_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "static", "cvs.xml")
  tree = ET.parse(file_path)
  bible_root = tree.getroot()
	


三、输入解析


在设计这款软件的时候,考虑了有5中搜索方式:

  • 书名(如:创世记 获取整本书内容)
  • 书名章 (如:创世记1 获取书的第一章内容)
  • 书名章-章 (如:创世记1-4 获取书的第一章到第4章内容)
  • 书名章:节 (如:创世记1:1 获取书的第一章第一节内容)
  • 书名章:节-节 (如:创世记1:1-10 获取书的第一章第一节到第十节内容)

同时还设计了不同的语言的输入,目前可以通过中文、英文、繁体 进行输入搜索。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

这里通过正则表达式来对输入进行匹配,从而从输入种提取到书名、章数和节数,允许通过中文、英文、繁体进行检索。

	# 匹配书名1:1-10的格式
	pattern_range_with_verse = r"([\u4e00-\u9fa5A-Za-z]+)\s*(\d+):(\d+)-(\d+)"
	# 匹配书名1-4的格式
	pattern_range = r"([\u4e00-\u9fa5A-Za-z]+)\s*(\d+)-(\d+)"
	# 匹配书名加章节格式的正则表达式
	pattern = r"([\u4e00-\u9fa5A-Za-z]+)\s*(\d*):?(\d*)"


四、获取经文


通过解析搜索关键字,我们能够获取到书名ID,章和节,通过这三个参数可以生成不同的xpath,用来从xml中查询数据。

  • 情况一:输入关键字包含书、章和节,并且节包含"-"
xpath = f".//div[@osisID='{
     osis_id}']/chapter[@osisID='{
     osis_id}.{
     chapter}']/verse"
  • 情况2:输入关键字包含书、章和节,并且节不包含"-"
xpath = f".//div[@osisID='{
     osis_id}']/chapter[@osisID='{
     osis_id}.{
     chapter}']/verse[@osisID='{
     osis_id}.{
     chapter}.{
     verse}']"
  • 情况3:输入关键字包含书和章,并且章包含"-"
xpath = f".//div[@osisID='{
     osis_id}']/chapter[@osisID='{
     osis_id}.{
     ch_num}']/verse"
  • 情况4:输入关键字包含书和章,并且章不包含"-"
xpath = f".//div[@osisID='{
     osis_id}']/chapter[@osisID='{
     osis_id}.{
     chapter}']/verse"
  • 情况5:输入关键字只包含书
xpath = f".//div[@osisID='{
     osis_id}']//verse"


五、软件打包


–onefile 打包成单个文件

–noconsole 无控制台

-i favicon.ico 给软件添加图标,要求是.ico格式的文件

–add-data “static;static” 将static文件夹和软件打包在一起

打包命令:

pyinstaller --onefile --noconsole -i favicon.ico --add-data "static;static" BibleQ.py


七、代码全文


import os
import tkinter as tk
from tkinter import messagebox, ttk
import xml.etree.ElementTree as ET
import re
from ttkbootstrap import Style
from tkinter import PhotoImage

# 中文到osisID的映射
chinese_to_osisid_mapping = {
   
	"创世记": "Gen","出埃及记": "Exod","利未记": "Lev","民数记": "Num","申命记": "Deut","约书亚记": "Josh","士师记": "Judg",
	"路得记": "Ruth","撒母耳记上": "1Sam","撒母耳记下": "2Sam","列王记上": "1Kgs","列王记下": "2Kgs","历代志上": "1Chr",
	"历代志下": "2Chr","以斯拉记": "Ezra","尼希米记": "Neh","以斯帖记": "Esth","约伯记": "Job","诗篇": "Ps","箴言": "Prov",
	"传道书": "Eccl","雅歌": "Song","以赛亚书": "Isa","耶利米书": "Jer","耶利米哀歌": "Lam","以西结书": "Ezek","但以理书": "Dan",
	"何西阿书": "Hos","约珥书": "Joel","阿摩司书": "Amos","俄巴底亚书": "Obad","约拿书": "Jonah","弥迦书": "Mic","那鸿书": "Nah",
	"哈巴谷书": "Hab","西番雅书": "Zeph","哈该书": "Hag","撒迦利亚书": "Zech","玛拉基书": "Mal","马太福音": "Matt","马可福音": "Mark",
	"路加福音": "Luke","约翰福音": "John","使徒行传": "Acts","罗马书": "Rom","哥林多前书": "1Cor","哥林多后书": "2Cor",
	"加拉太书": "Gal","以弗所书": "Eph","腓立比书": "Phil","歌罗西书": "Col","帖撒罗尼迦前书": "1Thess","帖撒罗尼迦后书": "2Thess",
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐沐森的故事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值