|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
最近多台电脑的书签不同步,有许多重复的,在网上也没找到好用的工具和方法来解决,所以自己写了个小工具来解决自己这个烦恼,希望对有需要的有所帮助。
以下是简单的介绍:
主目录
功能1
功能2
如果使用中遇到问题欢迎回帖反馈,如有更好的书签解决方法同样欢迎跟帖分享!
代码为 python 3+
- #!/usr/bin/env python
- # Chrome 导出的 html 书签检查工具
- # by Hellogz 2015-08-27 shenzhen
- import re
- import os
- import time
- def find_bookmark(html, patt):
- """用指定的正则表达式查找书签
- 参数 html: 书签字符串
- 参数 patt: 正则表达式
- 返回值: 查找到的书签列表
- """
- linkre = re.compile(patt)
- relist = linkre.findall(html)
- return relist
- def print_bookmark(bookmark, opt=''):
- """打印书签"""
- if len(bookmark):
- for i in bookmark:
- print('>>> Name: ' + i[1] +
- '\n>>> Url: ' + i[0])
- print('共%d条书签' %(len(bookmark)) + opt)
- def get_bookmark_list(file):
- """获取文件中的书签"""
- patt = 'HREF="(.+?)" ADD_DATE=".+?">(.+?)</A>' #查找Google书签导出html文件中的书签和书签名的url
- try:
- with open(file, 'r', encoding='utf-8') as f:
- html = f.read()
- except FileNotFoundError as exc:
- print('未知的文件:文件不存在?')
- return None
- except UnicodeDecodeError as exc:
- try:
- with open(file, 'r', encoding='utf-8') as f:
- html = str(f.read(), 'utf-8')
- except UnicodeDecodeError as exc:
- print('无法识别的文件:%s' %(file))
- return None
- relist = find_bookmark(html, patt)
- print('文件:%s 共%d条书签' %(os.path.basename(file), len(relist)))
- return relist
- def cmp_bookmark(bmk1, bmk2):
- """
- 比较 bmk1 与 bmk2 的不同
- """
- dif = [] #不相同的书签
-
- for i in bmk1:
- if i not in bmk2:
- dif.append(i)
- return dif
- def write_bookmark(bookmark, file=''):
- """把 bookmark 写入指定的 file 中"""
- if file is '':
- file = 'bookmarks_different.txt'
-
- with open(file, 'a') as f:
- try:
- f.write(time.ctime() + '\n')
- for i in bookmark:
- f.write(i[1] + '\t' + i[0] + '\n')
- print('已写入到当前程序目录下的 %s 文件中' %(file))
- except:
- print('写入失败')
- def find_repeat_bookmark(bookmark_list):
- """查找重复的 bookmark"""
- if type(bookmark_list) is list:
- repeat = []
- for i in range(len(bookmark_list)):
- for j in range(i + 1, len(bookmark_list)):
- if bookmark_list[i] == bookmark_list[j]:
- repeat.append((i, j))
- return repeat
- else:
- return '出错了!请检查书签~'
- def check_diff():
- """检查两个书签的不同之处"""
- file = input('请输入文件名:')
- bmk1 = get_bookmark_list(file)
- if bmk1 is None:
- return
- file = input('请输入文件名:')
- bmk2 = get_bookmark_list(file)
- if bmk2 is None:
- return
- dif = cmp_bookmark(bmk1, bmk2)
- if input('共%d条书签不相同, 打印输入"y" 其他输入将继续, 请输入:' %(len(dif))) is 'y':
- print_bookmark(dif)
- if input('注意:生成文件输入"y" 其他输入将继续, 请输入:') is 'y':
- write_bookmark(dif)
- def check_repeat():
- """检查书签是否有重复的"""
- file = input('请输入文件名:')
- bmk = get_bookmark_list(file)
- repeat = find_repeat_bookmark(bmk)
- if type(repeat) is str:
- print(repeat)
- return
- if len(repeat) > 0:
- if input('其中共有%d条书签重复, 打印输入"y" 其他输入将继续, 请输入:' %(len(repeat))) is 'y':
- for i in repeat:
- print('>>> Name: ' + bmk[i[0]][1] +
- '\n>>> Url: ' + bmk[i[0]][0])
- return
- print('共%d条书签重复' %(len(repeat)))
- def menu():
- return input('请选择功能:\n' +
- '1. 检查书签是否有重复\n' +
- '2. 检查两个书签的不同之处\n' +
- 'exit. 退出\n' +
- '请输入对应的编号:')
- def main():
- while True:
- choice = menu()
- if choice == '1':
- check_repeat()
- elif choice == '2':
- check_diff()
- elif choice == 'exit':
- break
- else:
- print('无法识别的输入, 请重新输入')
- #os.system('pause')
- if __name__ == '__main__':
- main()
-
复制代码 |
评分
-
查看全部评分
|