python参考文献目录_[zotero/python]库中参考文献条目删除后,清除残留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 sys

root = tk.Tk()

root.withdraw()

#选择PDF备份的目录

back_dir = filedialog.askdirectory(title = '请选择PDF备份的目录:')

try:

from pathlib import Path

except ImportError:

from pathlib2 import Path

if 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_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_dir = Path(

zotfile_dest_pat.search(configs).group('zotfile_dest'))

return zotero_data_dir, zotfile_dest_dir

if __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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值