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实现发送email的几种常用方法
Aug 18 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
Python字符串和字典相关操作的实例详解
Sep 23 Python
python操作xlsx文件的包openpyxl实例
May 03 Python
python 检查文件mime类型的方法
Dec 08 Python
Django 内置权限扩展案例详解
Mar 04 Python
python,Django实现的淘宝客登录功能示例
Jun 12 Python
python构建指数平滑预测模型示例
Nov 21 Python
python with语句的原理与用法详解
Mar 30 Python
python开发前景如何
Jun 11 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
Django 用户认证Auth组件的使用
Nov 30 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下目前为目最全的CURL中文说明
2010/08/01 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
如何用php获取文件名后缀
2013/06/09 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP利用百度ai实现文本和图片审核
2019/05/08 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
Zero Clipboard实现浏览器复制到剪贴板的方法(多个复制按钮)
2016/03/24 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
Bootstrap基本样式学习笔记之标签(5)
2016/12/07 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
vue与django集成打包的实现方法
2019/11/11 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
Python获取脚本所在目录的正确方法
2014/04/15 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
在Django中创建第一个静态视图
2015/07/15 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
Python中property属性实例解析
2018/02/10 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
一看就懂得Python的math模块
2018/10/21 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
Python3之不使用第三方变量,实现交换两个变量的值
2019/06/26 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
巴西购物网站:Submarino
2020/01/19 全球购物
2014年会演讲稿范文
2014/01/06 职场文书
老师对学生的寄语
2014/04/09 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫