python中的书目管理器(使用sqlite和pyside2)

physbiblio的Python项目详细描述


physiblio

python中的书目管理器
作者:S.Gariazzo(Stefano.Gariazzo@gmail.com

license:gpl v3pypi versionpypi versiondoicode style:black

physiblio是一个帮助管理书目的程序,特别关注高能物理工具。
它是用python编写的,图形界面使用pyside2,数据库管理使用sqlite。

<H2>1。开始

警告:

physiblio只在ubuntu(14.04lts到18.04版本)和sabayon linux上进行了密集测试,使用的是pythonversion2.7+3.5+
在运行macos的虚拟机上也进行了一些测试(10.14,python 3.7)。 它在其他操作系统或不同的python版本中应该同样工作良好,但它还没有经过测试。
在任何情况下,肯定仍然存在几个bug,程序可能会意外冻结或崩溃。 请在这里报告您发现的任何错误。

安装

要将physiblio安装到计算机中,最简单的方法是使用pip和正式的python存储库。 如果您的系统中没有安装pip,请参见本页。

请注意,目前pyside2仅适用于python2.7+和3.5+版本。 因此不支持其他python版本。

蟒蛇2

如果您使用Python2+,只需使用(系统范围的安装)

sudo pip install physbiblio

或(仅限用户安装)

pip install --user physbiblio

蟒蛇3

对于python 3+,命令几乎没有变化。 如果pip指向您的python3发行版,则上述命令将执行此操作。 否则,使用上述相同的命令,但使用pip3而不是pip

条件

在这里,您可以找到使用conda和相关命令安装和运行physiblio.exe的说明列表。 请注意,以下命令尚未使用pyside2进行测试。 请记住使用python版本2.7+或3.5+。

conda create --name physbiblio
conda activate physbiblio
pip install physbiblio

此时,安装已完成。 要正确启动主程序,请在激活相应的conda环境(conda activate physiblio),使用:

python PhysBiblio.exe

(如果省略了python,它将尝试使用默认python安装而不是conda安装,并且由于缺少库而失败)

附加信息

此时,physiblio.exe将安装在您的计算机中,在Linux中,它将位于一些文件夹中,如/usr/bin//usr/local/bin//your/user/folder/.local/bin/。 您可以找到软件包的安装位置

pip show -f physbiblio

主控制器位于位置下,您可以结合文件列表提供的信息

要从以前安装的版本升级,请在运行pip时添加选项-u--upgrade,例如:

sudo pip install -U physbiblio

pip install -U physbiblio

测试是否一切正常

安装软件后,您可能需要花几分钟来运行测试套件 检查一切正常。
测试套件可以通过同一个physiblio.exe可执行文件使用命令test: physiblio.exe测试 如果这不起作用,请检查全局变量路径是否正确配置。 另一种可能是使用以下命令之一直接指向physiblio脚本:

/path/to/PhysBiblio.exe test
python /path/to/PhysBiblio.exe test
python3 /path/to/PhysBiblio.exe test

整个测试套件将检查所有功能是否正常工作,并在几分钟内无错误和故障地完成,具体取决于Internet连接速度。
失败可能是由于缺少包、包版本不兼容、特定操作系统和包版本导致的特定不一致,或者缺少Internet连接(或错误)。 如果您不确定是哪种情况,并且在任何情况下都要报告您发现的任何问题,请转到
此处

如果只想运行测试套件的一部分,可以使用命令行选项(请参见physiblio.exe test-h)。 例如,physiblio.exe test-o将跳过所有联机测试。

如果测试由于分段错误而无法完成,或者出现随机行为,则可能是与python版本相关的问题。一个已知的案例包括sabayon linux中python 3.5.5的崩溃。使用python 3.6时不会出现问题。

用法

要运行程序,请执行已安装的physiblio.exe。 默认情况下,它将使用python2.x运行。 您可以通过命令行选择一个特定的python版本,例如,您可以使用

选择python3
python3 /path/to/PhysBiblio.exe

您可能需要创建指向physiblio的菜单快捷方式。 在ubuntu中,您只需使用自己选择的编辑器创建一个新文件/your/home/.local/share/applications/physiblio.desktop,然后插入以下行:

sudo pip install physbiblio
0

图标可以位于/usr/local/physiblio/icon.png/usr/physiblio/icon.png

默认设置

首次打开physiblio时,需要设置一些配置参数。
特别是,如果您没有正确设置Web浏览器和PDF阅读器,某些功能在使用命令行时可能无法工作。

依赖关系

physiblio依赖于几个python包:

  • sqlite3(用于数据库)
  • Pyside2(用于图形界面)
  • ADS(与ADS API交互的包)
  • appdirs(默认路径)
  • argparse(命令行参数)
  • bibtexparser(用于管理bibtex条目)
  • dictdifference(显示词典之间的差异)
  • feedparser(用于处理arxiv数据)
  • matplotlib(进行一些绘图)
  • 过时(检查是否有新版本)
  • pylatexenc(重音和其他UTF-8字符到LATEX命令)
  • pymarc(处理arxiv数据)
  • pyoai(用于大量收集inspire-hep数据库)
  • 请求(下载json页面)
  • 六(python2和python3之间的兼容性)
  • unittest2+mock(python2.x)/unittest(python3.x)(用于测试方法和函数)
<H2>2。功能

physiblio有一些很好的特性可以帮助管理参考书目。其中一些列在这里。

配置文件

您可以管理不同的配置文件,每个配置文件具有不同的设置和独立的数据库。 如果您希望单独维护活动或收藏,这可能很有用。

导入

默认导入界面可以从inspire-hep获取和下载信息。 高级导入还可以与广告arxivdx.doi.orgisbn2bittex一起工作。 如果存在arxiv标识符,则可以从arxiv下载纸制摘要(默认情况下,可以选择这样做)。

导出

很容易将一些条目导出到.bib文件中。 您可以导出整个bibtex数据库、一个选择或让程序只导出编译给定.tex文件所需的条目。 所有功能都可以在文件菜单中找到。

更新

physiblio可以使用inspire-hep信息来更新最近发布的条目的信息。 您会发现,使用日志信息更新数据库非常容易,您只需偶尔在单个文件或整个表上运行up date函数即可。
您还可以使用此功能更新现有文件的内容。

请注意inspire-hep的维护人员不鼓励在长的条目列表上使用update函数,因为它会在服务器上产生大量负载。 请参见此处的"激励OAI" rel="nofollow",以获得一种替代的、要求更低的方法。

类别

默认数据库包含两类:main标记。 您可以在树结构中添加子类别,并根据分类筛选bibtex条目。

实验

与类别不同,您可以组织由实验或协作发布的论文,并插入到实验网页的链接。 当你将一篇论文分配给一个实验时,它也将被归类到实验本身的相同类别中。

PDF

所有带有arxiv标识符的论文都有一个"从arxiv下载"功能。
对于其他论文,您可以手动分配一个单独下载的pdf文件,并将其存储在子文件夹中。
您不需要知道它保存在何处,因为您可以从程序中访问它,但如果您可以使用此功能在任何需要的地方复制PDF。

标记

您可以标记条目,以便能够轻松查看它们是好是坏,注意哪些条目需要阅读,哪些条目最有趣。

搜索并替换

数据库中的条目可以使用不同的字段组合、它们的相关类别或实验、标记、条目类型(评论、会议记录、讲座等)进行搜索。

搜索表单应该很容易理解(如果不是,请帮助我改进它并提交一个问题)。 如果需要,可以使用逻辑运算符并添加更多字段。 您还可以保存经常需要的搜索或替换,它们将出现在新菜单中供以后使用。

还实现了一个非常强大的"search and replace"函数,它可以使用正则表达式(regex)。
搜索功能与仅搜索的情况相同,但现在无法选择限制和偏移。
"替换"字段允许您从中选择要接受输入的字段以及要在其中存储新字符串的字段。
尝试匹配正则表达式时将执行其他筛选。不匹配,不执行操作。

两个(regex)搜索和替换示例:

  • 要将"phys.rev."系列日志的字母从"volume"移动到"journal",请使用:

    • 发件人:"已发布",(phys.rev.[a-z]{1}([0-9]{1,3})。*
    • 到1:"日志",\1
    • 至2:"音量",\2

    如果你想和"J.Phys"匹配的话。或其他日志,相应地更改模式字符串的第一部分(例如j.phys。[a-z]{1})。

  • 要从jhep/jcap条目的"volume"字段中删除前两个数字,请使用:

    • 使用"bibtex"中的["jhep"或"jcap"]("添加另一行"并使用"or")进行过滤;
    • 将"volume"中的([0-9]{2})替换为\2

0.5.0中的新功能:现在可以保存更频繁使用的搜索/替换。只需在新菜单中单击两次即可重新使用,并在所有配置文件中共享。

0.9.5中的新功能:您现在可以重新使用最近的搜索/替换,这些搜索/替换尚未明确保存,但已临时存储在数据库中。可使用"搜索/替换"表单中的向上/向下箭头键进行搜索。

INSPIRE-OAI

inspire-hep有一个专门的接口,可以进行大规模收割,请参见本页 为了避免在长的条目列表上使用update函数时服务器上的大量通信,您应该依赖oai函数。 基本上,代码不会查找每个条目,而是下载在给定时间间隔内修改的所有条目的信息,并使用本地数据库中需要的内容。
这样,数据通信量更高,但inspire-hep的服务器端负载更可持续。

最简单的方法(在Linux中)是使用cron作业,该作业将每天或每周运行,并使用命令physiblio.exe dailyphysiblio.exe weekly(另请参见3)。命令行用法)。
dailyweekly)例程将从Inspire-HEP数据库下载最后一天(星期)的更新,并更新本地数据库。

要设置cron作业,请使用crontab-e并添加以下行之一:

sudo pip install physbiblio
1

语法很简单:dailyweekly)脚本将每天(每周六)7:00运行,并将日志文件保存在所需的文件夹中。

然后,如果您想查看修改的完整列表,您可以检查日志文件的底部以查看修改的条目,并滚动整个内容。

您还可以使用更通用的physiblio.exe dates[date1[,date2]]命令,该命令允许您获取两个给定日期之间的内容(格式必须为yyyy-mm-dd)。 如果未指定,则默认日期与daily命令的日期相同。

美国宇航局的广告

nasa的ads服务通过api访问,使用由andy casey维护的非官方python客户端。 目前,只能从广告中下载bibtex条目,现有条目的更新或其他功能尚不可用。

通过api执行搜索的方式与通过编写c新用户界面版本中的复杂搜索字符串。 有关ADS搜索中使用的语法的说明,请参见本页的

<H2>3。命令行用法

一些函数也可以作为简单的命令行指令使用, 因此它们可以包含在任何非图形脚本中。

用法很简单:

sudo pip install physbiblio
2

可用命令列表包括:

了解如何使用各种子命令和选项的最佳方法是

sudo pip install physbiblio
3 <H2>4。数据路径

physiblio现在默认情况下使用user-config-diruser-data-dir>将数据保存在appdirs包指定的目录中。 通过命令行启动physiblio.exe时,这两个目录都在开头指示。

存储的配置包括一个profiles.db文件,其中包含有关现有配置文件的信息。

存储的数据包括:

  • apdf/子文件夹,包含所有论文的pdf。这通常在所有配置文件之间共享,除非在每个配置文件的配置中设置不同的路径;
  • 一组.db.log文件,其中包含每个配置文件的数据库和错误日志。

您可以更改配置中的某些路径和文件名。 请注意,更改配置不会将现有文件移动到新位置。

<H2>5。致谢

该软件是一个项目的一部分,该项目获得了欧盟地平线2020研究和创新计划的资助,该计划是根据第796941号Marie Sk_odowska-Curie赠款协议进行的。

图形用户界面中采用的图标主要来自于breeze图标主题,也来自于kde主题。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java中ArrayList的超简单问题   Java 8在一段时间后过期   java如何创建具有用户定义维度的矩阵,并使用从上到下、从左到右的递增值填充它?   java从JDBC重启mysql   带有sqlite的java LiveData未更新UI   带有JDialog的java小程序在Mac OSX中未正确隐藏   java ActionListener无法从公共类引用数组?   java Apache Digester:NoSuchMethodException:没有这样的可访问方法   安卓中数据库中的java数据没有以正确的格式检索   java快速排序实现:使用random pivot时几乎排序   安卓 Java:高效的ArrayList过滤?   java如何在单独的文件中制作GUI程序   jasper报告如何从JSP或Java代码在JasperReport中传递参数值?