接口到bbdb,一个阴险的老大哥数据库。

pybbdb的Python项目详细描述


Introduction

pybbdb听起来像一个粗鲁的噪音,但实际上它是一个python接口 到阴险的老大哥数据库(BBDB),一个与 GNU Emacs。你可以在Emacs Wiki上找到更多关于bbdb的信息。这个 pybbdb源repo托管在Bitbucket。版本可以在上找到 PyPI

注意

此模块仅处理BBDB版本2。中有版本3 关于Savannah的开发,但尚未公开发布。

Requirements

要安装并运行它:
pyparsingvoluptuoussix
运行单元测试:
pytest

Installation

通常的咒语会安装一些东西:

pip install pybbdb

Usage

Creating a BBDB database

创建一个新的数据库非常简单:

>>> from bbdb import BBDB
>>> db = BBDB()

数据库从没有记录开始。若要添加新的,请使用 add_record()方法,指定名字和姓氏,以及任何其他 要设置的属性:

>>> fred = db.add_record("Fred", "Flintstone")
>>> fred
<Record: Fred Flintstone>

>>> barney = db.add_record("Barney", "Rubble")
>>> db
<BBDB: 2 records>

您可以使用返回的记录对象设置其他属性:

>>> fred.set_company("Slate Rock & Gravel")

RecordOrderedDict的子类,因此您可以设置或修改 此样式的属性:

>>> fred["company"] = "Slate Rock & Gravel"

为了方便起见,每个有效属性都有属性:

>>> fred.firstname
'Fred'

>>> fred.company
'Slate Rock & Gravel'

还有一个复合的name属性:

>>> fred.name
'Fred Flintstone'

一些bbdb属性由事物列表组成,其中有add_*() 这些方法:

>>> fred.add_net("fred@bedrock.org")
>>> fred.add_net("fred.flintstone@gravel.com")
>>> fred.net
['fred@bedrock.org', 'fred.flintstone@gravel.com']

>>> fred.add_aka("Freddie")
>>> fred.aka
['Freddie']

电话记录由位置标签和电话号码字符串组成:

>>> fred.add_phone("Work", "555-6789")
>>> fred.add_phone("Home", "555-1234")
>>> fred.phone
SortedDict([('Home', '555-1234'), ('Work', '555-6789')])

记录可以有多个地址,每个地址都由一个位置标记索引。每个 地址又有几个属性:

>>> home = fred.add_address("Home")
>>> home.add_location("Cave 2a", "345 Cavestone Road")
>>> home.set_city("Bedrock")
>>> home.set_state("Hanna Barbera")
>>> home.set_zipcode("12345")
>>> home.set_country("USA")

>>> home
<Address: Cave 2a, 345 Cavestone Road, Bedrock, Hanna Barbera, 12345, USA>

>>> home.location
['Cave 2a', '345 Cavestone Road']

>>> home.zipcode
'12345'

最后,每个条目都可以有一个用户定义的任意字典 字段:

>>> fred.add_field("spouse", "Wilma")
>>> fred.add_field("kids", "Pebbles, Bam-Bam")
>>> fred.add_field("catchphrase", '"Yabba dabba doo!"')
>>> fred.fields
SortedDict([('catchphrase', '"Yabba dabba doo!"'), ('kids', 'Pebbles, Bam-Bam'), ('spouse', 'Wilma')])

字段值也可以有新行:

>>> barney.add_field("pets", "brontosaurus\npterodactyl")

Reading and writing BBDB files

write()方法将数据库写入流(默认 stdout)格式适合gnu emacs使用:

>>> db.write()                        # doctest: +ELLIPSIS +REPORT_UDIFF
;; -*-coding: utf-8-emacs;-*-
;;; file-version: 6
;;; user-fields: (catchphrase kids pets spouse)
["Barney" "Rubble" nil nil nil nil nil ((pets . "brontosaurus\npterodactyl")) nil]
["Fred" "Flintstone" ("Freddie") "Slate Rock & Gravel" (["Home" "555-1234"] ...

方便的write_file()方法会将其放入一个文件:

>>> db.write_file("examples/bbdb.el")

您可以使用fromfile()静态方法从文件中读取数据库:

>>> newdb = BBDB.fromfile("examples/bbdb.el")
>>> newdb
<BBDB: 2 records>

>>> newdb == db
True

可以使用bbdb数据库的read()read_file()方法 从其他数据库导入记录。

Exporting to other formats

因为所有的bbdb对象都是OrderedDict的子类,所以您可以很容易地 将其序列化为其他格式。例如,json:

>>> import sys
>>> import json
>>> json.dump(db, sys.stdout, indent=4)  # doctest: +NORMALIZE_WHITESPACE +REPORT_UDIFF
{
    "coding": "utf-8-emacs",
    "fileversion": 6,
    "records": [
        {
            "firstname": "Barney",
            "lastname": "Rubble",
            "company": "",
            "aka": [],
            "phone": {},
            "address": {},
            "net": [],
            "fields": {
                "pets": "brontosaurus\\npterodactyl"
            }
        },
        {
            "firstname": "Fred",
            "lastname": "Flintstone",
            "company": "Slate Rock & Gravel",
            "aka": [
                "Freddie"
            ],
            "phone": {
                "Home": "555-1234",
                "Work": "555-6789"
            },
            "address": {
                "Home": {
                    "location": [
                        "Cave 2a",
                        "345 Cavestone Road"
                    ],
                    "city": "Bedrock",
                    "state": "Hanna Barbera",
                    "zipcode": "12345",
                    "country": "USA"
                }
            },
            "net": [
                "fred@bedrock.org",
                "fred.flintstone@gravel.com"
            ],
            "fields": {
                "catchphrase": "\"Yabba dabba doo!\"",
                "kids": "Pebbles, Bam-Bam",
                "spouse": "Wilma"
            }
        }
    ]
}

您可以使用适当结构的dict创建bbdb数据库 fromdict方法:

>>> serialized = json.dumps(db)
>>> data = json.loads(serialized)
>>> newdb = BBDB.fromdict(data)
>>> newdb == db
True

Release history

Version 0.4 (10 February 2017)

  • 使用pytest进行单元测试。
  • 错误修复:在字段中添加对换行的支持。
  • 错误修正:允许姓氏为零。

Version 0.3 (22 July 2015)

  • 错误修复:让python 3正常工作。

Version 0.2 (2 July 2015)

  • 使用voluptuous添加数据验证。
  • 添加一组演示转换器程序。
  • 添加tox测试支持。
  • 添加Python3支持。
  • 错误修复:将记录从文件转换为正确的类型。

Feedback

向我(格伦·哈钦斯)报告任何问题、虫子等 zondo42@gmail.com。也欢迎使用补丁程序!

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

推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误