缘起

上了几个月网课,存了上千行英语的笔记在幕布上,即将开学,得导出来带到学校以备不时之需。为了方便查阅,得按顺序导出。

准备

幕布的导出有五个格式: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中的内容

在引入时遇到了一个&nbsp空格,只有一个,很奇怪
&nbsp不能被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)相关推荐

  1. python 字母顺序计数_计数并说出顺序

    python 字母顺序计数 Problem statement: 问题陈述: The count-and-say sequence is the sequence of integers with t ...

  2. python编程试题单词倒排_Python:将句子中的单词全部倒排过来,但单词的字母顺序不变...

    早上看到好友未央的一篇博文<一道google的测试工程师笔试题>,内容如下: 这是去年面试google测试工程师的一道题,题目如下: 设计一个函数,使用任意语言,完成以下功能: 一个句子, ...

  3. python中字母大小顺序_Python中的字母顺序

    好吧,我有关于以下代码的问题:s = "wxyabcd" myString = s[0] longest = s[0] for i in range(1, len(s)): if ...

  4. python单词表首字母排序_Python 程序按字母顺序对单词进行排序

    Python 程序按字母顺序对单词进行排序 在此程序中,您将学习使用for循环按字母顺序对单词进行排序并显示它. 要理解此示例,您应该了解以下Python编程主题: 在此示例中,我们说明了如何按字典顺 ...

  5. python 列表、元组 1.1 猜单词游戏。计算机随机产生一个单词,打乱字母顺序,供玩家去猜

    题目: 猜单词游戏.计算机随机产生一个单词,打乱字母顺序,供玩家去猜                         a.准备一组单词,随机抽取一个 b.将抽取的单词作为答案,打乱字母顺序,显示给玩家 ...

  6. python按照字典顺序输出字母_按层次和字母顺序对字典排序(Python)

    我使用Python字典(product_dict)来表示产品及其所有子部分的层次结构.dict的键是unique id(UUID),值是类对象,包含关于这些部分的所有信息,包括:part.name # ...

  7. python单词按字典序输出_python按字典顺序输出单词频率_Python:如何添加频率行数并使用字典按字母顺序排序......

    我有一个项目,我必须通过sys.stdin获取每个单词的频率数量 我已经获得了这部分.第二部分是获取每个单词的行号,我觉得我已经获得了,但我不能在输出字符串中添加行号,并且我也无法找到一种按字母顺序排 ...

  8. python列表按照字母排序_Python:按字母顺序对列表进行排序/分组

    我觉得这已经被问到了,但是这些问题的答案对我的代码没有效果. 我试图根据第一个列表[2]按字母顺序对列表进行排序,然后在按列表[3]和列表[4]排序的匹配条目内对列表进行排序,依此类推.真实的数据更大 ...

  9. python中怎么将字母倒着写,如何颠倒字母顺序

    我想把名字从z-a传下来. 我试着把名单按字母顺序倒序排序,然后循环整个名单,把每个名人的名字打印在自己的行上def main(): print('Celebrities known by one n ...

  10. Python字符串排序练习(按字母顺序排序)

    编写一个程序,接收逗号的单词序列作为输入,按字母顺序排序后按逗号分隔的序列输出单词,假设向程序提供以下输入:without,hello,bag,world 则输出为:bag,hello,without ...

最新文章

  1. 混合式APP开发中中间件方案Rexsee
  2. Linux之父盟友分道扬镳 直言开源模式软肋
  3. 精通Server Core系列之二 ---Server Core安装与基本配置
  4. java数组-如何在一堆数据中使用数组!
  5. 《剑指offer》-整数中1出现的次数
  6. 微信小程序保存图片fail Error: unable to verify the first certificate 微信小程序 当前系统代理不是安全代理,是信任问题解决
  7. 雷军恭喜苏炳添全运会夺冠:你是小米精神的最好代言
  8. MySql-Mysql技术内幕~SQL编程学习笔记(N)
  9. java 接口返回不带双引号_Java入门:基础知识
  10. 【js 分页】js 分页 方法一 【实用】
  11. PS中抠图的几种方法简介
  12. Windows7 64位安装EPLAN P8 2.6教程
  13. 计算机二级access分数分布_计算机二级office题型及分值分布
  14. 搜索引擎的查找算法实现
  15. window10 删除桌面删除不掉的ie图标(快捷方式)
  16. 独立操作按钮操作后自动失焦
  17. Mybatis-plus的自动填充功能
  18. 关于linux重启后磁盘分区消失的情况复现与修复
  19. Metasploit-模块介绍
  20. WebSocket的那些事(3-STOMP实操篇)

热门文章

  1. 解决mac上复制粘贴失效问题
  2. 浪潮FS6700 思科MDS 9148S光纤通道交换机图形化配置方法,小白也能轻松上手
  3. 无线路由器实现网络接入
  4. 第一章:Html-超文本标记语言
  5. 后基因组行为遗传学:从革命到常规(上)
  6. 搜集百度关键词的相关网站、生成词云
  7. 七个习惯之七:不断更新
  8. 史上最全的中药口诀大全
  9. cad缩放_CAD软件中的CAD图纸界限是什么?
  10. php使用cookie获取浏览记录,php使用cookie存库浏览记录详解