读取marc-xml的简单python接口

marcalyx的Python项目详细描述


马尔卡利克斯

PyPi VersionBuild Status

用于读取的简单python接口 MARC-XML

安装

pip install marcalyx

用法

导入包

>>> import marcalyx

marcalyx在xml.etree.ElementTree.Element对象(或兼容对象)上工作,因此 在将XML传递给Marcalyx对象之前,需要对其进行分析。为了 实例,给定一个包含单个<record>

>>> import xml.etree.ElementTree as ET

或者,使用lxml

>>> import lxml.etree as ET

然后:

>>> tree = ET.parse('tests/xml/1027474578.xml')
>>> record_element = tree.getroot()
>>> marc = marcalyx.Record(record_element)

如果xml包含一个记录的<collection>对象,则可以创建一个marcalyx.Collection对象,从中可以获取记录:

>>> coll = marcalyx.Collection(collection_element)
>>> marc = coll.records()[0]

字段

一旦有了记录,就可以通过标记访问字段(始终使用3个字符的字符串,例如,“001”、“010”、“100”):

>>> marc.field("245")
[245 10$aKindred /$cOctavia E. Butler.]

或者,更简单地说:

>>> marc["245"]
[245 10$aKindred /$cOctavia E. Butler.]

当通过标记访问时,字段总是作为数组返回(但不一定来自下面的便利方法)。字段可以是控制字段:

>>> type(m["008"][0])
<class 'marcalyx.marcalyx.ControlField'>

或数据字段:

>>> type(m["245"][0])
<class 'marcalyx.marcalyx.DataField'>

所有字段都有一个tag和一个value

>>> m["008"][0].tag
'008'
>>> m["245"][0].tag
'245'
>>> m["008"][0].value
'180306r20141979xxk    g      000 j eng d'
>>> m["245"][0].value
'Kindred / Octavia E. Butler.'

数据字段有两个“指示器”:

>>> m["245"][0].ind1
'1'
>>> m["245"][0].ind2
'0'

子字段,可以通过subfield()方法访问,该方法返回数组:

>>> m["245"][0].subfield('a')
[$aKindred /]

与字段一样,您可以通过下标获得子字段:

>>> m["245"][0]['a']
[$aKindred /]

可以使用包含字段标记和子字段代码的元组作为 获取包含所有字段的代码(如果有)的所有子字段的简单列表 带着那个标签(如果有的话):

>>> m[('650','a')]
[$aAfrican American women, $aTime travel]

valuestr

字段的字符串表示以常规方式格式化,显示指示符和子字段:

>>> str(m["245"][0])
'245 10$aKindred /$cOctavia E. Butler.'

value格式化为显示:

>>> m["245"][0].value
'Kindred / Octavia E. Butler.'

子字段

子字段具有代码、值和字符串表示:

>>> m["245"][0].subfield("a")[0].code
'a'
>>> m["245"][0].subfield("a")[0].value
'Kindred /'
>>> str(m["245"][0].subfield("a")[0])
'$aKindred /'

方便方法

有几种方法可以更容易地获取单个字段或类别 在田野里。mainEntry()将返回记录具有的1xx字段中的任何一个 (作为DataField,而不是数组):

>>> m.mainEntry()
100 1#$aButler, Octavia Estelle$d(1947-2006).$4aut

#titleStatement获取245字段(同样,作为DataField而不是数组):

>>> m.titleStatement()
245 10$aKindred /$cOctavia E. Butler.

还有一些方法可以获取 领域。其中的每一个都返回 给定类别:

>>> marc.controlFields() # 00X
>>> marc.codes()         # 01X-09X
>>> marc.titles()        # 20X-24X
>>> marc.edition()       # 25X-28X
>>> marc.description()   # 3XX
>>> marc.series()        # 4XX
>>> marc.notes()         # 5XX
>>> marc.subjects()      # 6XX
>>> marc.addedEntries()  # 70X-75X
>>> marc.linking()       # 76X-78X
>>> marc.seriesAdded()   # 80X-83X
>>> marc.holdings()      # 841-88X

一些常用数字有方便的方法:

> record.lccn       # 010$a, String or nil
> record.isbns      # 020$a, Array of Strings, or []
> record.issns      # 022$a, Array of Strings, or []

领导者

你可以找唱片公司的负责人:

>>> marc.leader
'00000cam a2200000Mi 4500'

贡献

github上的https://github.com/seanredmond/marcalyx欢迎错误报告和请求拉取。这个项目旨在成为一个安全、受欢迎的协作空间,而且贡献者应该遵守Contributor Covenant行为准则。

许可证

gem是根据MIT License的条款作为开放源码提供的。

行为准则

在lccnorm项目的代码库、问题跟踪程序、聊天室和邮件列表中进行交互的每个人都应该遵循code of conduct

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

推荐PyPI第三方库


热门话题
java方法readAllBytes()对于InputStream类型是未定义的   Java:从一个目录,从internet上读取文本文件   java禁用javac中的StringBuilder优化   雅虎财经历史API csv似乎无法打开流?JAVA   java添加CriteriaBuilder。在(日期)和谓词之间?   java分解像php分解一样的行/字符串   java类型Marshaller中的方法Marshall(对象,结果)不适用于参数(T,File)   java如何使用cxfxjcplugin从多个xsd生成POJO?   java在orm中的JPA命名查询中。xml,如何将对象作为param传递并在JPQL中使用其属性   java创建另一个对象内部的对象   ibm集成总线如何通过java计算节点覆盖JMSReceive节点的MessageCorrelationIDSelector   java接口在内部接口中扩展,Jenkins中编译错误   原因:java。网UnknownHostException:调用web服务时ASHISH_PC   加密java。lang.SecurityException:JCE无法验证提供程序BC   java recycler如何查看数据绑定?   java Map仅使用Dozer从HashMap映射到HashMap的选定键