如何保存和回复进度(txt文件读取)
Tofloor
poster avatar
cdxyh
deepin
2020-04-28 15:36
Author
最近学python3,编了一个读小说的文件,可以阅读了,不过每次都从头开始,请大侠指点一下,如何保存进度,下次运行时直接从上次结束的地方开始读。
底下是源码,请不吝指教!

from aip import AipSpeech
import os
import sys
import json
config={
    'appId':'*********',
    'apiKey':'************',
    'secretKey':'*************'
}
client = AipSpeech(**config)
text=""
file=sys.argv[1]
def tts(text):
    result = client.synthesis(text, 'zh', 1, { "spd":5, 'pit':5, 'vol': 5, 'per':1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open("temp.mp3", 'wb') as f:        
            f.write(result)
        f.close()
    os.system("play temp.mp3")
tts(text)
def main():
    a = open(file, 'r')
    while True:
        text = a.readline()
        tts(text)
main()
Reply Favorite View the author
All Replies
avatar
cdxyh
deepin
2020-04-28 15:39
#1
config={
    'appId':'*********',
    'apiKey':'************',
    'secretKey':'*************'}
里面的***部分是百度账号的信息,隐藏了!
Reply View the author
avatar
SamLukeYes
deepin
2020-04-28 16:57
#2
有一个简单粗暴的方法,每次打开文件都直接readlines,然后根据索引来定位
Reply View the author
avatar
cdxyh
deepin
2020-04-28 17:49
#3
https://bbs.deepin.org/post/193122
有一个简单粗暴的方法,每次打开文件都直接readlines,然后根据索引来定位 ...

不好意思,我是刚学的,所以有没有类似的例子发一个供我学习一下!
Reply View the author
avatar
SamLukeYes
deepin
2020-04-28 17:59
#4
https://bbs.deepin.org/post/193122
不好意思,我是刚学的,所以有没有类似的例子发一个供我学习一下!

我这个方法肯定不是最优的,一次性readlines在处理大文件的时候会很占用资源。刚刚又想到了一个更好的算法,用一个变量记录循环的次数,中断的时候把循环次数存在文件里,下一次再打开的时候读取循环次数并且预先执行相应次数的readline(不输出)再开始阅读。可能还有更好的方法,我只是随便脑补一下,例子你自己找吧
Reply View the author
avatar
cdxyh
deepin
2020-04-28 18:40
#5
https://bbs.deepin.org/post/193122
我这个方法肯定不是最优的,一次性readlines在处理大文件的时候会很占用资源。刚刚又想到了一个更好的算 ...

好的,感谢了,我再试试!
Reply View the author
avatar
139******73
deepin
2020-04-28 19:15
#6
楼主想练习,那能试试以下需求吗?

linuxtxt阅读软件设计需求
原因:linux下没有什么比较好的txt阅读器,或代码编辑器。
想法:国人自己做个出来
总体思路,参考已经不再更新的百度阅读器PC版,以及手机上的掌阅阅读器,做一个类似界面的txt,chm,pdf,pdg,doc,docx等小说或说明书,以txtdoc,docx小说为主(以下统称为TXT小说)阅读器。
linux版先封装个deb的吧,后边再考虑rpm格式封装的。
一、第一阶段需求(第1版):
1.先支持鼠标单击操作、上下左右键操作。
2.有简单的书架界面,显示所有拖入过的TXT小说。支持点击进入阅读模式。
3.有书本式阅读界面
4.支持将TXT小说直接拖入阅读器打开,避免linux下目录繁杂找目录困难。同样,也需要支持打开方式。
5.有按专用字“序、第x部、章、节、大结局”等关键字提取并生成目录,支持退出时记录位置,下次进入时可以直接到达相应的位置。支持点击目录跳转。
6.支持自动换行、自动排版。支持自动计算总页数、当前页数。
7.支持双页阅读、单页阅读。
8.可不考虑背景色更换,可先设定羊皮纸、护眼纸背景中的一种。
9.支持可以更改/不可以更改TXT文件,此功能主要是替代linux编辑器或windows下的记事本功能。
10.支持打印功能。
二、第二阶段需求(第2版):
1.仍保持主界面、阅读界面简洁,以下增项均可在设置里设置功换。设置后保持状态。
2.增加主界面、阅读界面自由缩放、支持全屏。
3.书架界面增加自定义书架分区,如《小说区》《工作区》等。
4.书架界面增加直连某个小说网站,直接搜索、扒取txt并下载功能。(这个如果难可以放弃)
5.阅读界面增加多书籍标签,支持一键切换到备用的工作文档打开状态。(适合用办公区防老板的),如tab键,或支持键盘组合设定。
6.支持多标签页对比模式(两个单页)、同步滚动模式、对于不同的文字,可以自定义文字底色提醒模式。
7.阅读界面增加txt编码切换并重新排版功能。
8.在顶部总标签栏增加保存、打印、设置按钮。
9.支持page up ,page down,以及跳转到下一章开头或上一章开头。
10.增加书签设定,不少于5个书签,或自定义书签个数。
11.阅读界面提供显示当前TXT小说阅读的进度百分比,可选左侧增加每一行的总第行号。
12.模拟书页的上角增加当前的章节号、章节名功能。
13.增加按Ctrl+鼠标滚轮进行字体缩放(主要适合于高分屏与普通屏的不同)。
14.增加章节的第一段的首字大写一号,或加重。
15.增加字、词的查找及跳转、文字替换。(如果具有可更改txt文件,则必然应具有此功能)。
16.增加选定文字的百度、搜狗百科搜索功能。
17.增加背景颜色可选项,可以考虑增加背景图片选项。
18.增加字体与背景反色功能选项。就是背景黑时,文字白的;背景白的,文字黑的。
19.阅读界面增加页边距设定功能。
20.阅读界面增加翻单页特效、翻多页特效。
21.增加打印拼接功能,包括2页、4页,或小册子功能、打印预览功能。
三、第三阶段需求(第3版):
1.暂未想到。

Reply View the author
avatar
cdxyh
deepin
2020-04-28 21:16
#7
https://bbs.deepin.org/post/193122
楼主想练习,那能试试以下需求吗?

linux版txt阅读软件设计需求 原因:linux下没有什么比较好的txt阅读器 ...

您太高看我的能力了,我只是一个小白,刚开始接触python!
Reply View the author
avatar
cdxyh
deepin
2020-04-28 21:24
#8
通过学习,做好了,可以保存进度,下次打开时可以从上次结束的地方打开了,下一步试一下不同文件如何用dict保存进度了;
源码如下:
from aip import AipSpeech
import os
import sys
import json
config={
    'appId':'*********',
    'apiKey':'************',
    'secretKey':'*************'
}
client = AipSpeech(**config)
text=""
file=sys.argv[1]
def tts(text):
    result = client.synthesis(text, 'zh', 1, { "spd":5, 'pit':5, 'vol': 5, 'per':1, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open("temp.mp3", 'wb') as f:        
            f.write(result)
        f.close()
    os.system("play temp.mp3")
def jindu(data):#保存进度
    with open("record.ini","w") as record:
        record.write(data)
    record.close()
def main():
    a = open(file, 'r')
    b=open("record.ini","r")#读取进度
    a.seek(int(b.readline()))#设置指针偏移
    while True:
        text = a.readline()
        tts(text)
main()
Reply View the author
avatar
139******73
deepin
2020-04-29 00:07
#9
https://bbs.deepin.org/post/193122
您太高看我的能力了,我只是一个小白,刚开始接触python!

本来是朋友孩子上大学,学习编程,我就提了这么个要求,想让孩子练手有个目标。
结果可能是吓到了?说不会。哈哈
我本人年龄大了,已经不想学编程了,所以只能发给你们看看
Reply View the author