python导出chrome书签到markdown文件的实例代码


Posted in Python onDecember 27, 2017

python导出chrome书签到markdown文件,主要就是解析chrome的bookmarks文件,然后拼接成markdown格式的字符串,最后输出到文件即可。以下直接上代码,也可以在 py-chrome-bookmarks-markdown 中直接参见源码。

from json import loads
import argparse
from platform import system
from re import match
from os import environ
from os.path import expanduser
# 过滤name
filter_name_list = {'My work', '书签栏', 'websites'}
html_escape_table = {
  "&": "&",
  '"': """,
  "'": "'",
  ">": ">",
  "<": "<",
}
output_file_template = """
<h3>书签目录</h3>
{catelog}
{bookmark_bar}
{other}
"""
# 如需本地调试可注释掉这一段 START
parser = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter,
                 description="python导出chrome书签到markdown文件.")
parser.add_argument("input_file", type=argparse.FileType('r', encoding='utf-8'), nargs="?",
          help="读取书签的位置,可以指定文件位置(相对路径,绝对路径都可以),非必填,默认为Chrome的默认书签位置")
parser.add_argument("output_file", type=argparse.FileType('w', encoding='utf-8'),
          help="读取书签的位置,可以指定文件位置(相对路径,绝对路径都可以),必填")
args = parser.parse_args()
if args.input_file:
  input_file = args.input_file
else:
  if system() == "Darwin":
    input_filename = expanduser("~/Library/Application Support/Google/Chrome/Default/Bookmarks")
  elif system() == "Linux":
    input_filename = expanduser("~/.config/google-chrome/Default/Bookmarks")
  elif system() == "Windows":
    input_filename = environ["LOCALAPPDATA"] + r"\Google\Chrome\User Data\Default\Bookmarks"
  else:
    print('Your system ("{}") is not recognized. Please specify the input file manually.'.format(system()))
    exit(1)
  try:
    input_file = open(input_filename, 'r', encoding='utf-8')
  except IOError as e:
    if e.errno == 2:
      print("The bookmarks file could not be found in its default location ({}). ".format(e.filename) +
         "Please specify the input file manually.")
      exit(1)
output_file = args.output_file
# 如需本地调试可注释掉这一段 END
# 本地调试可以指定文件名测试 START
# input_filename = 'C:/Users/Administrator/AppData/Local/Google/Chrome/User Data/Default/Bookmarks'
# input_file = open(input_filename, 'r', encoding='utf-8')
# output_file_name = 'test2.md'
# output_file = open(output_file_name, 'w', encoding='utf-8')
# 本地调试可以指定文件名测试 END
# 目录
catelog = list()
def html_escape(text):
  return ''.join(html_escape_table.get(c, c) for c in text)
def html_for_node(node):
  # 判断url和children即判断是否包含在文件夹中
  if 'url' in node:
    return html_for_url_node(node)
  elif 'children' in node:
    return html_for_parent_node(node)
  else:
    return ''
def html_for_url_node(node):
  if not match("javascript:", node['url']):
    return '- [{}]({})\n'.format(node['name'], node['url'])
  else:
    return ''
def html_for_parent_node(node):
  return '{0}\n\n{1}\n'.format(filter_catelog_name(node),
                 ''.join([filter_name(n) for n in node['children']]))
# 过滤文件夹
def filter_name(n):
  if n['name'] in filter_name_list:
    return ''
  else:
    return html_for_node(n)
# 过滤目录名
def filter_catelog_name(n):
  if n['name'] in filter_name_list:
    return ''
  else:
    catelog.append('- [{0}](#{0})\n'.format(n['name']))
    return '<h4 id={0}>{0}</h4>'.format(n['name'])
contents = loads(input_file.read())
input_file.close()
bookmark_bar = html_for_node(contents['roots']['bookmark_bar'])
other = html_for_node(contents['roots']['other'])
catelog_str = ''.join(a for a in catelog)
output_file.write(output_file_template.format(catelog=catelog_str, bookmark_bar=bookmark_bar, other=other))

导出示例: https://github.com/kent666a/kent-resources/blob/master/bookmarks.md

总结

以上所述是小编给大家介绍的python导出chrome书签到markdown文件的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python读取word文档的方法
May 09 Python
python中input()与raw_input()的区别分析
Feb 27 Python
python3中bytes和string之间的互相转换
Feb 09 Python
用Python实现KNN分类算法
Dec 22 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
Nov 06 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
python matplotlib画图库学习绘制常用的图
Mar 19 Python
python中property和setter装饰器用法
Dec 19 Python
pytorch中的numel函数用法说明
May 13 Python
关于Python中*args和**kwargs的深入理解
Aug 07 Python
Django + Taro 前后端分离项目实现企业微信登录功能
Apr 07 Python
Python类的继承和多态代码详解
Dec 27 #Python
快速查询Python文档方法分享
Dec 27 #Python
Java及python正则表达式详解
Dec 27 #Python
python matplotlib画图实例代码分享
Dec 27 #Python
python爬虫使用cookie登录详解
Dec 27 #Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 #Python
Python并发编程协程(Coroutine)之Gevent详解
Dec 27 #Python
You might like
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
Javascript 解疑
2009/11/11 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
JavaScript正则表达式的分组匹配详解
2016/02/13 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
整理关于Bootstrap导航的慕课笔记
2017/03/29 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
JS实现数组的增删改查操作示例
2018/08/29 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python with用法实例
2015/04/14 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
2018/12/12 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
canvas烟花特效锦集
2018/01/17 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
同步和异步有何异同,在什么情况下分别使用他们
2013/04/09 面试题
求职简历中自我评价
2014/01/28 职场文书
校庆接待方案
2014/03/18 职场文书
乡镇团委工作总结2015
2015/05/26 职场文书
生日宴会祝酒词
2015/08/10 职场文书
六年级数学教学反思
2016/02/16 职场文书
2019行政前台转正申请书范文3篇
2019/08/15 职场文书
openstack云计算keystone组件工作介绍
2022/04/20 Servers
Windows server 2016服务器基本设置
2022/08/14 Servers