幕布笔记按字母顺序导出(Python+Opml)
缘起
上了几个月网课,存了上千行英语的笔记在幕布上,即将开学,得导出来带到学校以备不时之需。为了方便查阅,得按顺序导出。
准备
幕布的导出有五个格式:word,pdf,图片,html,opml
word,pdf,图片都不太行,html过于繁杂而我又不甚了解,看起来还是opml比较好操作
- html
- opml
<?xml version="1.0" encoding="UTF-8"?>
<opml version="2.0"><head><title>英语纠错</title><hjs>ctbfl</hjs></head><body><outline text="辨析" _mubu_text="%E7%9B%AF%E7%9D%80%E7%B3%BB%E5%88%97"><outline text="stare at" _mubu_text="stare%20at"><outline text="盯着" _mubu_text="%E7%9B%AF%E7%9D%80"></outline></outline><outline text="glare at" _mubu_text="glare%20at"><outline text=" 怒目而视" _mubu_text="%20%E6%80%92%E7%9B%AE%E8%80%8C%E8%A7%86"></outline></outline><outline text="glance at " _mubu_text="glance%20at%20"><outline text="瞥了一眼" _mubu_text="%E7%9E%A5%E4%BA%86%E4%B8%80%E7%9C%BC"></outline></outline></outline></body>
</opml>
搜索了一下,关于opml的东西有点少,所幸找到了一个python库,年代有些久远,但能用就好。
opml 0.5:https://pypi.org/project/opml/0.5/
根据介绍,这个库只是对opml文件的解析,不支持修改opml文件,所以应该生成一个新的文件来储存。
在pycharm中使用opml
preference --> Project:* --> Project Interpreter --> +
一搜果然有opml,文件很小,几乎秒安装。
用parse引入文件
outline = opml.parse("英语纠错.opml")
可以用类似列表的方式读取opml中的内容
在引入时遇到了一个 空格,只有一个,很奇怪
 不能被opml库读取,会报错,删掉就好
测试文件如下:
执行下列语句
import opml
outline = opml.parse("英语纠错.opml")
print(len(outline))
print(outline.hjs)print(len(outline[0]))
print(outline[0].text)print(len(outline[0][0]))
print(outline[0][0].text)print(len(outline[0][0][0]))
print(outline[0][0][0].text)
结果:
1
ctbfl
3
辨析
1
stare at
0
盯着
其中,outline的属性来自<head>...</head>
动手
先写一个输出函数
带有缩进的递归输出
out_note函数用于递归:
add = "" #控制缩进
def out_note(x):#输入为元素本体#输出元素下所有子项global addadd = add + " "print(add,end="")for i in range(len(x)):print("·"+x[i].text)if len(x[i]) != 0:out_note(x[i])if i != len(x)-1:print(add,end="")else:add = add[:len(add)-4]
再用out_main函数做前期准备工作:
def out_main(index):#输入为元素序号global addadd = ""print(outline[index].text)out_note(outline[index])
按字母表排序
获取每一个主项(缩进为0),并进行冒泡排序
list_index=list(range(n)) #储存序号
list_num = [""]*n #储存数字
for i in range(n):temp = outline[i].textlist_num[i] = temp.lower()#统一小写
for i in range(n-1):for j in range(n-i-1):if list_num[j]>list_num[j+1]:t = list_num[j+1]tt = list_index[j+1]list_num[j+1] = list_num[j]list_index[j + 1] = list_index[j]list_num[j] = tlist_index[j] = tt
聚合
import opml
doc = open("text2.txt","w")
outline = opml.parse("text.opml")
add = "" #控制缩进
def out_main(index):global addadd = ""print(outline[index].text,file=doc)out_note(outline[index])def out_note(x):#输入元素本体#输出元素下所有子项global addadd = add + " "print(add,end="",file=doc)for i in range(len(x)):print("·"+x[i].text,file=doc)if len(x[i]) != 0:out_note(x[i])if i != len(x)-1:print(add,end="",file=doc)else:add = add[:len(add)-4]
n = len(outline)
list_index=list(range(n)) #储存序号
list_num = [""]*n #储存数字
for i in range(n):temp = outline[i].textlist_num[i] = temp.lower()
for i in range(n-1):for j in range(n-i-1):if list_num[j]>list_num[j+1]:t = list_num[j+1]tt = list_index[j+1]list_num[j+1] = list_num[j]list_index[j + 1] = list_index[j]list_num[j] = tlist_index[j] = ttfor i in list_index:out_main(i)print("",file=doc)print("----------------------------------------",file=doc)
效果
全文纯属个人理解
学识浅薄,方法简陋,有错误敬请指正
幕布笔记按字母顺序导出(Python+Opml)相关推荐
- python 字母顺序计数_计数并说出顺序
python 字母顺序计数 Problem statement: 问题陈述: The count-and-say sequence is the sequence of integers with t ...
- python编程试题单词倒排_Python:将句子中的单词全部倒排过来,但单词的字母顺序不变...
早上看到好友未央的一篇博文<一道google的测试工程师笔试题>,内容如下: 这是去年面试google测试工程师的一道题,题目如下: 设计一个函数,使用任意语言,完成以下功能: 一个句子, ...
- python中字母大小顺序_Python中的字母顺序
好吧,我有关于以下代码的问题:s = "wxyabcd" myString = s[0] longest = s[0] for i in range(1, len(s)): if ...
- python单词表首字母排序_Python 程序按字母顺序对单词进行排序
Python 程序按字母顺序对单词进行排序 在此程序中,您将学习使用for循环按字母顺序对单词进行排序并显示它. 要理解此示例,您应该了解以下Python编程主题: 在此示例中,我们说明了如何按字典顺 ...
- python 列表、元组 1.1 猜单词游戏。计算机随机产生一个单词,打乱字母顺序,供玩家去猜
题目: 猜单词游戏.计算机随机产生一个单词,打乱字母顺序,供玩家去猜 a.准备一组单词,随机抽取一个 b.将抽取的单词作为答案,打乱字母顺序,显示给玩家 ...
- python按照字典顺序输出字母_按层次和字母顺序对字典排序(Python)
我使用Python字典(product_dict)来表示产品及其所有子部分的层次结构.dict的键是unique id(UUID),值是类对象,包含关于这些部分的所有信息,包括:part.name # ...
- python单词按字典序输出_python按字典顺序输出单词频率_Python:如何添加频率行数并使用字典按字母顺序排序......
我有一个项目,我必须通过sys.stdin获取每个单词的频率数量 我已经获得了这部分.第二部分是获取每个单词的行号,我觉得我已经获得了,但我不能在输出字符串中添加行号,并且我也无法找到一种按字母顺序排 ...
- python列表按照字母排序_Python:按字母顺序对列表进行排序/分组
我觉得这已经被问到了,但是这些问题的答案对我的代码没有效果. 我试图根据第一个列表[2]按字母顺序对列表进行排序,然后在按列表[3]和列表[4]排序的匹配条目内对列表进行排序,依此类推.真实的数据更大 ...
- python中怎么将字母倒着写,如何颠倒字母顺序
我想把名字从z-a传下来. 我试着把名单按字母顺序倒序排序,然后循环整个名单,把每个名人的名字打印在自己的行上def main(): print('Celebrities known by one n ...
- Python字符串排序练习(按字母顺序排序)
编写一个程序,接收逗号的单词序列作为输入,按字母顺序排序后按逗号分隔的序列输出单词,假设向程序提供以下输入:without,hello,bag,world 则输出为:bag,hello,without ...
最新文章
- 混合式APP开发中中间件方案Rexsee
- Linux之父盟友分道扬镳 直言开源模式软肋
- 精通Server Core系列之二 ---Server Core安装与基本配置
- java数组-如何在一堆数据中使用数组!
- 《剑指offer》-整数中1出现的次数
- 微信小程序保存图片fail Error: unable to verify the first certificate 微信小程序 当前系统代理不是安全代理,是信任问题解决
- 雷军恭喜苏炳添全运会夺冠:你是小米精神的最好代言
- MySql-Mysql技术内幕~SQL编程学习笔记(N)
- java 接口返回不带双引号_Java入门:基础知识
- 【js 分页】js 分页 方法一 【实用】
- PS中抠图的几种方法简介
- Windows7 64位安装EPLAN P8 2.6教程
- 计算机二级access分数分布_计算机二级office题型及分值分布
- 搜索引擎的查找算法实现
- window10 删除桌面删除不掉的ie图标(快捷方式)
- 独立操作按钮操作后自动失焦
- Mybatis-plus的自动填充功能
- 关于linux重启后磁盘分区消失的情况复现与修复
- Metasploit-模块介绍
- WebSocket的那些事(3-STOMP实操篇)