This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
pymarc [19/08/2009 00:00] |
pymarc [19/08/2009 11:28] fernando |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== pymarc ====== | ||
+ | <note> | ||
+ | Atención: existe otro proyecto similar, [[http://sourceforge.net/projects/pymarc/|PyMARC en SourceForge]], by mstetson. Incluye ''MarcBreaker.py'' y ''MarcMaker.py''. | ||
+ | </note> | ||
+ | |||
+ | pymarc 2.0 / read, write and modify MARC bibliographic data | ||
+ | |||
+ | Web: http://pypi.python.org/pypi/pymarc/2.0 | ||
+ | |||
+ | Code: http://fruct.us/bzr/pymarc/ | ||
+ | |||
+ | |||
+ | **PACKAGE CONTENTS** | ||
+ | |||
+ | * constants | ||
+ | * exceptions | ||
+ | * field | ||
+ | * marc8 | ||
+ | * marc8_mapping | ||
+ | * marcxml | ||
+ | * reader | ||
+ | * record | ||
+ | * writer | ||
+ | |||
+ | |||
+ | |||
+ | ===== record ===== | ||
+ | |||
+ | class Record(object): | ||
+ | A class for representing a MARC record. Each Record object is made up of | ||
+ | multiple Field objects. You'll probably want to look at the docs for Field | ||
+ | to see how to fully use a Record object. | ||
+ | | ||
+ | Basic usage: | ||
+ | | ||
+ | field = Field( | ||
+ | tag = '245', | ||
+ | indicators = ['0','1'], | ||
+ | subfields = [ | ||
+ | 'a', 'The pragmatic programmer : ', | ||
+ | 'b', 'from journeyman to master /', | ||
+ | 'c', 'Andrew Hunt, David Thomas.', | ||
+ | ]) | ||
+ | | ||
+ | record.add_field(field) | ||
+ | | ||
+ | Or creating a record from a chunk of MARC in transmission format: | ||
+ | | ||
+ | record = Record(data=chunk) | ||
+ | | ||
+ | Or getting a record as serialized MARC21. | ||
+ | | ||
+ | raw = record.as_marc21() | ||
+ | | ||
+ | You'll normally want to use a MARCReader object to iterate through | ||
+ | MARC records in a file. | ||
+ | |||
+ | |||
+ | ==== Methods ==== | ||
+ | |||
+ | def __init__(self, data=''): | ||
+ | Si len(data) > 0 llama a self.decode_marc(data) | ||
+ | |||
+ | def __str__(self): | ||
+ | In a string context a Record object will return a prettified version | ||
+ | of the record in MARCMaker format. See the docstring for Field.__str__ | ||
+ | for more information. | ||
+ | |||
+ | def __getitem__(self, tag): | ||
+ | Allows a shorthand lookup by tag: | ||
+ | | ||
+ | record['245'] | ||
+ | |||
+ | def __iter__(self): | ||
+ | Usado para iterar sobre los campos; ver next() | ||
+ | |||
+ | def next(self): | ||
+ | Usado para iterar sobre los campos | ||
+ | |||
+ | def add_field(self, *fields): | ||
+ | add_field() will add pymarc.Field objects to a Record object. | ||
+ | Optionally you can pass in multiple fields. | ||
+ | |||
+ | def get_fields(self, *args): | ||
+ | When passed a tag ('245'), get_fields() will return a list of all the | ||
+ | fields in a record with a given tag. | ||
+ | | ||
+ | title = record.get_fields('245') | ||
+ | | ||
+ | If no fields with the specified | ||
+ | tag are found then an empty list is returned. If you are interested | ||
+ | in more than one tag you can pass in a list: | ||
+ | | ||
+ | subjects = record.get_fields('600', '610', '650') | ||
+ | | ||
+ | If no tag is passed in to fields() a list of all the fields will be | ||
+ | returned. | ||
+ | |||
+ | def decode_marc(self, marc): | ||
+ | decode_marc() accepts a MARC record in transmission format as a | ||
+ | a string argument, and will populate the object based on the data | ||
+ | found. The Record constructor actually uses decode_marc() behind | ||
+ | the scenes when you pass in a chunk of MARC data to it. | ||
+ | |||
+ | def as_marc21(self): | ||
+ | returns the record serialized as MARC21 | ||
+ | |||
+ | Estos métodos devuelven campos específicos: | ||
+ | |||
+ | def title(self): | ||
+ | def isbn(self): | ||
+ | def author(self): | ||
+ | ... | ||
+ | |||
+ | |||
+ | ===== field ===== | ||
+ | |||
+ | class Field(object): | ||
+ | Field() pass in the field tag, indicators and subfields for the tag. | ||
+ | | ||
+ | field = Field( | ||
+ | tag = '245', | ||
+ | indicators = ['0','1'], | ||
+ | subfields = [ NOTE: positions 0, 2, 4, ... are codes; 1, 3, 5, ... are values | ||
+ | 'a', 'The pragmatic programmer : ', | ||
+ | 'b', 'from journeyman to master /', | ||
+ | 'c', 'Andrew Hunt, David Thomas.', | ||
+ | ] | ||
+ | | ||
+ | If you want to create a control field, don't pass in the indicators | ||
+ | and use a data parameter rather than a subfields parameter: | ||
+ | | ||
+ | field = Field(tag='001', data='fol05731351') | ||
+ | |||
+ | |||
+ | ==== Methods ==== | ||
+ | |||
+ | |||
+ | def __init__(self, tag, indicators=None, subfields=None, data=''): | ||
+ | data se usa sólo para campos de control (tag < 010) | ||
+ | |||
+ | def __iter__(self): | ||
+ | usado para iterar sobre los subcampos (ver next()) | ||
+ | Devuelve: self | ||
+ | |||
+ | def __str__(self): | ||
+ | A Field object in a string context will return the tag, indicators | ||
+ | and subfield as a string. This follows MARCMaker format; see [1] | ||
+ | and [2] for further reference. Special character mnemonic strings | ||
+ | have yet to be implemented (see [3]), so be forewarned. Note also | ||
+ | for complete MARCMaker compatibility, you will need to change your | ||
+ | newlines to DOS format ('\r\n'). | ||
+ | | ||
+ | [1] http://www.loc.gov/marc/makrbrkr.html#mechanics | ||
+ | [2] http://search.cpan.org/~eijabb/MARC-File-MARCMaker/ | ||
+ | [3] http://www.loc.gov/marc/mnemonics.html | ||
+ | | ||
+ | Devuelve: string | ||
+ | |||
+ | def __getitem__(self, subfield): | ||
+ | Retrieve the first subfield with a given subfield code in a field: | ||
+ | | ||
+ | field['a'] | ||
+ | | ||
+ | Handy for quick lookups. | ||
+ | |||
+ | def next(self): | ||
+ | usado para iterar sobre los subcampos | ||
+ | |||
+ | def value(self): | ||
+ | Returns the field as a string without tag, indicators, and | ||
+ | subfield indicators. | ||
+ | |||
+ | def get_subfields(self, *codes): | ||
+ | get_subfields() accepts one or more subfield codes and returns | ||
+ | a list of subfield values. The order of the subfield values | ||
+ | in the list will be the order that they appear in the field. | ||
+ | | ||
+ | print field.get_subfields('a') | ||
+ | print field.get_subfields('a', 'b', 'z') | ||
+ | | ||
+ | Devuelve: None o lista de valores, e.g. ['Pérez, Juan,', '1954-'] | ||
+ | |||
+ | def add_subfield(self, code, value): | ||
+ | Adds a subfield code/value pair to the field. | ||
+ | | ||
+ | field.add_subfield('u', 'http://www.loc.gov') | ||
+ | | ||
+ | Devuelve: nada | ||
+ | |||
+ | def is_control_field(self): | ||
+ | returns true or false if the field is considered a control field. | ||
+ | Control fields lack indicators and subfields. | ||
+ | | ||
+ | Devuelve: boolean | ||
+ | |||
+ | def as_marc21(self): | ||
+ | used during conversion of a field to raw marc | ||
+ | | ||
+ | Devuelve: string | ||
+ | |||
+ | def format_field(self): | ||
+ | Returns the field as a string without tag, indicators, and | ||
+ | subfield indicators. Like pymarc.Field.value(), but prettier | ||
+ | (adds spaces, formats subject headings). | ||
+ | | ||
+ | Devuelve: string | ||
+ | |||
+ | def is_subject_field(self): | ||
+ | Returns True or False if the field is considered a subject | ||
+ | field. Used by format_field. | ||
+ | | ||
+ | Devuelve: boolean | ||
+ | |||
+ | |||
+ | {{tag>python marc}} |