python批量小说txt文件转json文件

1 篇文章 0 订阅
订阅专栏

前言

       最近在做一个项目涉及小说文件的处理,项目要提供小说在线观看的功能。
       因为小说文件大概有10GB放在mysql不切实际,而且希望用redis做一些缓冲,故小说文件转为json格式更方便数据操作。
       由于资源网站获取来的小说文件为txt格式,故需要用python进行一些转换,下文为本人的处理方式

原文件

  • 文件名格式
    1

  • 小说内容格式
    2

  • 编码格式
    小说txt文件为UTF-8编码
    注:原txt文件不为UTF-8需转换工具: 下载

目标文件

  • 小说汇总文件book.json
    1

  • 各小说内容文件

    • 文件名格式 bookID.json
    • 文件格式
      1
      2

python代码


import os,sys
import json,re

class fileScanner(object):

        def __init__(self,dir):
            self.dir = dir
            self.files = []
            self.size = 0;
        
        def scanFile(self):
            ##扫描所有txt文件
           filetype ='.txt'
           file = {
                'fileName':'',
                'filePath':''
           }
           
           for parent,dirnames,filenames in os.walk(self.dir):
                for filename in filenames:
                    file = {
                    'fileName':'',
                    'filePath':''
                    }
                    file['fileName'] = filename
                    file['filePath']= os.path.join(parent, filename) 
                    if file['filePath'].find(filetype)!=-1:
                        self.files.append(file)
                        print("扫描到: "+file['filePath'])
                        self.size+=1


class bookTojson(object):
        def __init__(self,files):
            self.files = files
            self.books = []
        
        def readBookDetail(self,n):
            detail = {
                'bookID':n,
                'bookName':'无',
                'autor':'无',
                'bookType':'无'
            }
            fileName = self.files[n]['fileName']
            fileName = fileName.replace('.txt','')  #文件名清理
            fileName= re.sub(r'【(.*)】', "", fileName) #文件名清理
            
            detail['bookName'] = fileName #初始赋值小说名,防止为空
            if re.search(r'《(.*)》',fileName):
                #print('书名:'+re.search(r'《(.*)》',fileName).group().strip('《》'))
                detail['bookName'] = re.search(r'《(.*)》',fileName).group().strip('《》')
                fileName= re.sub(r'《(.*)》', "", fileName)
                
            if re.search(r'\[(.*)\]',fileName):
                #print('类别:'+re.search(r'\[(.*)\]',fileName).group().strip('[]'))
                detail['bookType'] = re.search(r'\[(.*)\]',fileName).group().strip('[]')
                
            if len(fileName.split('作者:'))>1:
                #print('作者:'+fileName.split('作者:')[1])#文件名编码为GB2312
                detail['autor'] = fileName.split('作者:')[1]
            
            
            self.books.append(detail)
        
        #输出小说内容为json    
        def writeJson(self,book,bookID):
            jsonArr = json.dumps(book, ensure_ascii=False, sort_keys=False, indent=4, separators=(',', ': '))
            filePath ='D:\\BaiduNetdiskDownload\\books\\bookJson\\'+str(bookID)+'.json'
            with open(filePath, 'w+', encoding='utf-8') as f:
                f.writelines(jsonArr)
        #
        #处理小说输出章节及内容
        def readBookContent(self,n):
            
            book = {
                'bookID':n,
                'bookName':self.books[n]['bookName'],
                'autor':self.books[n]['autor'],
                'bookType':self.books[n]['bookType'],
                'chapters':[],##章节 item {}
                'contents':{}##
            }
            
            chapterName = ''
            content = ''
            
            fopen=open(self.files[n]['filePath'],encoding = 'utf-8',mode = 'r') 
            lines=[]
            lines=fopen.readlines()
            index = 1  #章节号
            flag = 0  #读取到章节内容的标志
            for line in lines:    
                if len(line)>0:
                    if re.match(r'^(\\s*)',line)==None:
                        if ord(line[0])!=12288:
                            #读取到章节标题
                            #print(line)
                            chapterName+=(line+' ')
                            flag = 0 
                        else:
                            #读取到章节内容
                            
                            if flag == 0:
                                flag =1
                                #可以写入章节内容
                            else:
                                flag+=1
                                content+=line
                    else:
                        #读取到章节内容
                        
                        if flag == 0:
                            flag =1
                            #可以写入章节内容
                        else:
                            flag+=1
                            content+=line
                                
                if flag == 1 :
                    #上一章内容写入
                    if index > 1:
                        book['contents'][str(n)+str(index-1)] = content
                        content = line #新章节内容开始
                    if chapterName != None:
                        chapter = {
                        'chapterID':'',
                        'chapterName':'无',
                        } #注意字典for内赋值问题
                        
                        chapter['chapterID'] = str(n)+str(index)
                        chapter['chapterName'] = chapterName
                        chapterName = ''
                        book['chapters'].append(chapter)
                        
                    #章节标题读取结束
                    index += 1
                    
            #末端章节
            book['contents'][str(n)+str(index-1)] = content
            self.writeJson(book,n)   
            #print(json.dumps(book, ensure_ascii=False, sort_keys=False, indent=4, separators=(',', ': ')))  
                    
        def runFun(self,n):
         try:
            self.readBookDetail(n)
            self.readBookContent(n)
         except Exception:
            print('文件'+str(n)+'错误')
            



if __name__ == "__main__":
    #填入小说文件夹名
    fs = fileScanner("D:\\BaiduNetdiskDownload\\books\\books") #注意路径带双斜杠 防止出现转义字符\n等
    print('获取小说文件名:')
    fs.scanFile()        
    bTj = bookTojson(fs.files)    
    print('开始处理小说:')
    for i in range(0,len(fs.files)):
        bTj.runFun(i)
        sys.stdout.write("  已处理:%.3f%%" %  float(((i/len(fs.files)))*100) + '\r')
        sys.stdout.flush()
    print('小说处理完成')
    
    
    data=bTj.books
    jsonArr = json.dumps(data, ensure_ascii=False, sort_keys=False, indent=4, separators=(',', ': '))
    print('文件json格式已输出')
    with open('books.json', 'w+', encoding='utf-8') as f:
        f.writelines(jsonArr)
       
    print("小说数%d"%fs.size)

运行结果

1
2

后言

然后10个G的2000部小说大概跑了一个小时才全部转为json ヽ(ー_ー)ノ ,算法问题欢迎大佬指正下方留言,注:需要资源也可下方留言

学习笔记19-txtjson
LZL2020LZL的博客
04-19 1647
【代码】学习零碎-txtjson
JsonToTxt:通过Pythonjson换为txt
05-21
JsonToTxt 本脚本JsonTT-V4用于处理指定格式的json文件,通过读取用户输入的文件路径或者是文件夹路径,将指定的json文件文件下的所有json文件化为根据host划分的txt文件。 本版本处理的json文件格式实例: {"host":"205.234.131.206", "domain":null, "time":"2015-07-03T16:00:10-04:00", "log":[{"type":"connect","data":null,"error":null}, {"type":"read","data":{"response":"220 Welcome to Pure-FTPd [privsep] [TLS] "},"error":null}]} (若需要修改json格式,只需修改createTxt函数中相应读取字段值) 本脚本根据用户输入的文件路径或文
python json文件txt文件,批处理json文件换成一个txt文件
01-30
python json文件txt文件,批处理json文件换成一个txt文件,需要json文件的哪部分只需要对函数做相应的修改即可,输入文件的路径就可以得到想要的结果,方便高效.zip
利用PythonTXT文件中的经纬度数据换为JSON格式
最新发布
chenchuang0128的博客
04-04 459
通过使用上述Python脚本,我们可以轻松地将TXT文件中的经纬度数据换为JSON格式。在处理地理空间数据时,经常需要将数据从一种格式换为另一种格式,以便于后续的分析或可视化。在很多应用中,我们需要将这些数据换为JSON格式,以便在网络应用中传输或在前端进行可视化。为了将这些数据换为JSON格式,我们可以编写一个Python脚本来读取TXT文件,并将每行数据换为一个包含。假设我们有一个TXT文件,其中包含了多行经纬度数据,每行数据由纬度和经度两个数值组成,中间用空格分隔。
TXT文件格式批量换器
02-08
1.可以把一般格式的TXT文件批量换为UTF-8格式等,方便操作大量的.txt文件 2.供有特殊需要的朋友下载,比如我万恶的手机阅读器只支持utf-8格式. 3.任何问题联系leonkiros2004@163.com,不过这个软件太简单了..估计没有任何问题..hoho 4.XP测试下通过,欢迎报bug..
Unity开发——3种Json插件及其使用简单介绍
好记性不如烂笔头
06-15 1764
Unity开发——3种Json插件及其使用简单介绍 LitJson插件、Newtonsoft.JsonJsonUtility 及其实现的读档存档解析服务器数据的功能方法
txt文件内容换成json文件
热门推荐
Xiaoze的博客
09-13 1万+
目标:将a.txt内容换成b.json内容 初始txt文本 小王,19 小李,20 小陈,21 换成功的json内容 { “list”:[ {“name”:“小王”,“age”:19}, {“name”:“小李”,“age”:20}, {“name”:“小陈”,“age”:21} ], “average”:20, “total”:3 } 换 1.在txt文件同级下创建一个js文件 const path = require('path') const fs = require('fs') le
pythonTXT文件化成json文件
wisuky的博客
10-25 1万+
目录1、首先看一下结果:2、代码 1、首先看一下结果: txt文件json文件: 2、代码 首先读入txt文件的路径 path = 'file.txt' 接着就可以化了 with open(path,'r',encoding='utf-8')as f: #打开txt文件 for line in f: d = {} d['conte
Pythontxt中内容解析到json文件
网络资源是无限的
04-15 1503
Pythontxt中内容解析到json文件
如何使用python语言将txt中的数据化成json格式的数据?
飞上云端看彩虹
07-23 1万+
port_result.txt里面的文本内容如下: 怎么罚变道? 如何处罚变道? 怎样处理变道? 要怎么惩处变道? 应该怎么惩办变道? 法律怎么责罚变道? 到底怎么惩罚变道? 说一下怎么处置变道? 说说怎么处分变道? 告诉我怎么处治变道? 如何将port_result.txt里面的文本内容格式化为如下格式? [ { "name": "怎么罚变道?" }...
pythontxtjson_python自动化将pdf换成txt
weixin_39867212的博客
11-27 176
很多时候,pdf不能复制,我们想要pdf中的内容,无从下手,那么好吧,就用python换下吧。 我们可以使用python的PDFMiner。因为据说PDFMiner更适合文本的解析,而我需要解析的正是文本,因此使用PDFMiner就是非常棒的选择。一.安装: 1. 需要下载源文件包 http://pypi.python.org/pypi/pdfminer/,解压,然后命令行cmd进入此文件...
txtjson脚本
08-29
TXT格式json格式,python3.6开发环境编写,注释完整
json格式 json格式大全
10-10
json数据格式大全,内涵json案例,c#web开发必备
Python批量更改json标注文件中的imagePath为当前json名称
06-17
如果重命名过标注文件json名称,但json里的imagePath并不会随之改变,这个代码可以批量修改imagePath为当前json文件
Win10系统下安装labelme及json文件批量化方法
09-18
主要介绍了Win10系统下安装labelme及json文件批量化的方法,文中较详细的给大家介绍了安装过程 ,需要的朋友可以参考下
python excel批量换为txt文件
01-17
运行前需要做配置,配置文件为根目录下的 config.json readyFolder 为excel的根目录(当前版本不设子目录,以后都不会有) column 为表格内的纵区间,例如A1-B1,只需要输入["A","D"]。只有最小和最大,没有单列...
深度学习-标注文件处理(txt批量换为json文件
absence521的博客
01-12 1760
接上篇,根据脚本可将coco128的128张图片,按照比例划分成训练集、测试集、验证集,同时生成相应的标注的labels文件夹,最近再看实例分离比较火的mask rcnn模型,准备进行调试但由于实验室算力不足,网上自己租的2080ti马,传整个coco2017实在是太慢了,检索了一下没有开源的部分coco2017数据集,于是我想到将coco128的数据化成json文件,便于新手进行debug,节约时间和算力。说明我们生成的json文件是正确的。
txt文件json格式
shr177180的博客
02-26 1613
txt换xml文件格式代码
txt 换为json
monk96的博客
07-14 2007
将 0 110 200 沉头 这种格式的数据json
pythontxt文件批量json
06-08
好的,我来为你讲解如何使用Pythontxt文件批量JSON。 假设你有多个txt文件,它们的文件名都以.txt结尾,你想将它们批量换为JSON格式并保存在同一目录下。具体的步骤如下: 1. 导入必要的模块 首先,需要导入os和json模块。os模块提供了访问操作系统功能的接口,json模块提供了处理JSON格式的函数。 ``` import os import json ``` 2. 遍历txt文件 使用os模块的listdir函数遍历存储txt文件的目录。然后,使用Python的for循环来迭代目录中的每个文件,找到以.txt结尾的文件,并对它们进行操作。在循环中,使用os.path.join函数创建文件的完整路径。 ``` txt_folder = "/path/to/txt/folder" # 存储txt文件的目录 json_folder = "/path/to/json/folder" # 存储json文件的目录 for file_name in os.listdir(txt_folder): if file_name.endswith(".txt"): txt_path = os.path.join(txt_folder, file_name) ``` 3. 读取txt文件换为JSON格式 对于每个txt文件,使用Python的with语句打开文件并读取其内容。然后,使用json模块的loads函数将其换为Python中的字典类型。 ``` with open(txt_path, 'r') as file: text = file.read() data = json.loads(text) ``` 4. 将Python字典换为JSON格式 使用json模块的dumps函数将Python字典换为JSON格式。 ``` json_data = json.dumps(data) ``` 5. 保存JSON文件JSON数据写入名为file_name.json文件中,并将其保存在json_folder中。可以使用Python内置的open函数打开一个新文件,并使用write函数将JSON数据写入该文件。 ``` json_path = os.path.join(json_folder, file_name.replace(".txt", ".json")) with open(json_path, 'w') as file: file.write(json_data) ``` 最终的完整代码如下: ``` import os import json txt_folder = "/path/to/txt/folder" # 存储txt文件的目录 json_folder = "/path/to/json/folder" # 存储json文件的目录 for file_name in os.listdir(txt_folder): if file_name.endswith(".txt"): txt_path = os.path.join(txt_folder, file_name) with open(txt_path, 'r') as file: text = file.read() data = json.loads(text) json_data = json.dumps(data) json_path = os.path.join(json_folder, file_name.replace(".txt", ".json")) with open(json_path, 'w') as file: file.write(json_data) ``` 希望这个代码可以帮助到你。如果还有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • PTA练习----0-1背包,给定n(n<=100)种物品和一个背包。物品i的重量是wi,价值为vi,背包的容量为C(C<=1000)...,(动态规划) 16619
  • hyperledger Fabric 2.3版本使用Go SDK搭建区块浏览器 9774
  • Fabric链代码容器时间差8小时问题 8300
  • PTA练习----最大子段和,给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n]...,(动态规划) 7942
  • 神来免费小说网站(开源)IDEA源码+小说压缩文件 7777

分类专栏

  • 博客使用学习 1篇
  • 区块链 11篇
  • 笔记 1篇
  • 软件工程 8篇
  • 软件工程专业实验及作业 23篇
  • 前端学习 5篇
  • 移动开发 3篇
  • 批处理脚本 5篇
  • spring框架 7篇
  • javaWeb 8篇
  • 算法日志 18篇
  • 软件产品设计 1篇
  • 数据库 1篇
  • python 1篇

最新评论

  • 神来免费小说网站(开源)IDEA源码+小说压缩文件

    m0_62471092: 我已经私信你了,可以帮我看一下吗,谢谢

  • 神来免费小说网站(开源)IDEA源码+小说压缩文件

    预备全栈工程师的小白: 啥错误啊

  • 神来免费小说网站(开源)IDEA源码+小说压缩文件

    m0_62471092: 我打开显示错误,请问能帮忙看一下吗

  • 神来免费小说网站(开源)IDEA源码+小说压缩文件

    m0_62471092: 我打开显示错误,请问能帮忙看一下吗

  • 神来免费小说网站(开源)IDEA源码+小说压缩文件

    m0_62471092: 我打开cu

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • go解析tendermint RPC接口返回的区块数据(解析失败可参考)
  • helloworld
  • Fabric链代码容器时间差8小时问题
2022年1篇
2021年25篇
2020年40篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

两个鬼故事华为手机怎么连接电脑台湾歌手向涵之个人资料家风作文公司起名大师五行属土的字起名二个字的商标起名起名网免费测验母婴用品微商起名我长大了作文400字六国论原文及翻译电视剧一生有你秒速5厘米水的商标起名字大全鬼怪百度云书籍起名海字起姓名斗神都市锦江城市花园三期qq蜡笔小新头像北京篮球王名字怎么起名称戴姓起名大全女孩2020鼠年起名大全未闻花名主题曲杭州核酸检测定点医院名典生日八字起名欧洲杯晋级规则bt美剧伏尔泰的思想主张少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化