更新:使用 @滏阳河边捉蚯蚓 https://zhuanlan.zhihu.com/p/41297136上获取系统PDF文件和zotero.sqlite文件的代码,在此感谢!

在zotero的library中删除参考文献条目后,有时PDF不会同步删除,尤甚是安装了zotfile插件后,添加参考文献条目后,对应的PDF附件会移动后zotfile指定的目录中,删除条目后PDF也不会同步删除,因此写了个脚本。运行后,如果目录中某个PDF没有对应的参考文献条目,这个PDF就会被转移到备份的文件夹中。

其原理是读取PDF目录中PDF文件的文件名,如a.pdf,b.pdf....,再读取zoter.sqlite文件中的附件目录,如果后者不包括a.pdf,则移动PDF目录中的a.pdf到备份的目录中。

将代码复制为.py文件,如zot.py,在命令提示符下运行:

python zot.py

运行时需要关闭zotero,自己指定选择备份的目录。

如果有多余的PDF,则提示已备份***.pdf到备份目录中。

如果移动错了,将备份文件目录中的文件自己复制回去即可。如果确认无误,再自行删除备份的文件。

# -*- coding: utf-8 -*-
"""
Spyder Editor"""
from __future__ import print_function
from os import walk, remove
import os
import re
import tkinter as tk
from tkinter import filedialog
import shutil #移动或复制文件
import sqlite3
import pandas as pd
import configparser
import shutil
import sysroot = tk.Tk()
root.withdraw()#选择PDF备份的目录
back_dir = filedialog.askdirectory(title = '请选择PDF备份的目录:')try:from pathlib import Path
except ImportError:from pathlib2 import Pathif sys.version_info.major == 2:reload(sys)sys.setdefaultencoding('UTF8')def get_zotfile_dest_and_zotero_data_dirs():'''Get the Zotero data dir and the Zotfile destination dir in PosixPath type'''profile_dirs = {'darwin': Path.home() / 'Library/Application Support/Zotero','linux': Path.home() / '.zotero/zotero','linux2': Path.home() / '.zotero/zotero','win32': Path.home() / 'AppData/Roaming/Zotero/Zotero'}profile_dir = profile_dirs[sys.platform]config = configparser.ConfigParser()config.read('{}'.format(profile_dir / 'profiles.ini'))configs_loc = profile_dir / config['Profile0']['Path'] / 'prefs.js'configs = configs_loc.read_text()zotero_data_pat = re.compile(r'user_pref("extensions.zotero.dataDir", "(?P<zotero_data>.+)");')zotero_data_dir = Path(zotero_data_pat.search(configs).group('zotero_data'))zotfile_dest_pat = re.compile(r'user_pref("extensions.zotfile.dest_dir", "(?P<zotfile_dest>.+)");')zotfile_dest_dir = Path(zotfile_dest_pat.search(configs).group('zotfile_dest'))return zotero_data_dir, zotfile_dest_dirif __name__ == '__main__':#得到zotero数据目录和文件目录zotero_data_dir, zotfile_dest_dir = get_zotfile_dest_and_zotero_data_dirs()list_of_files = [] #文件包含目录files = [] #仅文件名for (dirpath, dirnames, filenames) in walk(zotfile_dest_dir):for file in filenames:if file.endswith('.pdf') == True:list_of_files.append(os.path.join(dirpath, file))files.append(file)#连接数据库zot_sqlite = os.path.join(zotero_data_dir, 'zotero.sqlite')with sqlite3.connect(zot_sqlite) as con:item_att=pd.read_sql_query("SELECT * FROM itemAttachments", con=con)item_path = item_att['path']#生成备份文件目录#当文件不存在时,才创建该文件夹。if not os.path.exists(back_dir):os.mkdir(back_dir)for i in range(len(files)):#如zotero.sqlite的path中不包括文件if not (item_path.str.contains(re.escape(files[i])).any()): #os.remove(list_of_files[i]) #也可以删除文件shutil.move(list_of_files[i], os.path.join(back_dir, files[i]))#移动文件到备份目录print('已备份',files[i],'到',back_dir)

win 10,Deepin 15.11测试通过。

python参考文献_[zotero/python]库中参考文献条目删除后,清除残留PDF的脚本相关推荐

  1. python参考文献目录_[zotero/python]库中参考文献条目删除后,清除残留PDF的脚本

    # -*- coding: utf-8 -*- """Spyder Editor""" from __future__ import pri ...

  2. python提取word参考文献_写作相关 | word中参考文献转化为.bib格式全流程

    因为在latex中编辑不方便修改和审阅,所以一般都会选择在word中编辑文本后,再放入latex中进行排版.但是如果参考文献和引用不是用endnotes等管理好的话,在导入参考文献到latex中就比较 ...

  3. python重构_重构Python应用程序以简化操作

    python重构 Do you want simpler Python code? You always start a project with the best intentions, a cle ...

  4. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  5. 注册表中exe被删除后恢复

    恢复注册表   如果我们不小心将注册表中的exe删除后,这个时候不管打开什么软件都需我们自己进行指定才能打开使用,这样是及其麻烦的,而且在删除掉.exe之后,原来能在"运行"中搜索 ...

  6. python pptx库中文文档_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  7. python pptx教学_基于python-pptx库中文文档及使用详解

    个人使用样例及部分翻译自官方文档,并详细介绍chart的使用 一:基础应用 1.创建pptx文档类并插入一页幻灯片 from pptx import Presentation prs = Presen ...

  8. python svr回归_使用sklearn库中的SVR做回归分析

    sklearn中的回归有多种方法,广义线性回归集中在linear_model库下,例如普通线性回归.Lasso.岭回归等:另外还有其他非线性回归方法,例如核svm.集成方法.贝叶斯回归.K近邻回归.决 ...

  9. array python 交集_模糊数学Python库简介和评测

    写在前面 模糊数学是国内外许多工学.管理学研究生以上的选修甚至必修课程.但对于非数学专业而言,掌握模糊数学的各种计算方法.了解各种方法的用途(应用场景)其实要比理解模糊数学的"数学" ...

最新文章

  1. SOA Notes
  2. 「镁客·请讲」NOLO VR张道宁:空间定位技术加持下的VR,是可以搞出商业价值的...
  3. android展示gif循环,android:GIF动画循环完成听众
  4. boost::depth_first_search用法的测试程序
  5. 飞利浦弃意已决 冠捷顺势接手
  6. jsoup的介绍使用(转)
  7. ux设计_声音建议:设计UX声音的快速指南
  8. jpush java api_JPush極光推送Java服務器端API
  9. liunx宝塔配置https_宝塔面板安装教程
  10. socket编程简单Demo讲解及源码分享(C# Winform 内网)
  11. 解决p4c安装时protobuf未定义引用的错误
  12. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况(split、zip...)
  13. STM32 CAN波特率设置
  14. 《Dreamweaver CS6 完全自学教程》笔记 第四章:创建站点
  15. 华为普工一个月的工资是多少?
  16. 力扣1438.绝对差不超过限制——python
  17. tableau制作玫瑰图
  18. linux pam 使用例子,PAM认证模块使用实例
  19. 智慧政务解决方案-最新全套文件
  20. Oracle 11g ORA-27101,ORA-00119,ORA-00132 解决方案

热门文章

  1. mysql怎么修改表中的文字_mysql表中怎么修改字段?
  2. 复习---使用基础语法实现栈及迭代
  3. 测试boot库下I/O模型类型
  4. android可以有一个悬浮窗口在进入屏保状态显示,点击进入应用,Android如何实现锁屏状态下弹窗...
  5. vscode如何创建一个go项目_如何用手机创建一个网站
  6. go TypeError: Failed to execute ‘fetch‘ on ‘Window‘: Request with GET/HEAD method cannot have body.
  7. pythonpath manager_python 路径操作工具 pathlib,比 os 模块好用太多
  8. python日期迭代_计算敏捷项目中迭代时间安排(Python3版)
  9. ijkplayer、VLC Player、SmartPlayer、ExoPlayer播放器比较
  10. vue-cli打包后怎么修改服务器地址实践有效