PyMarc неверная буквенная ошибка
Я пытаюсь разобрать файл MARC, загруженный из Библиотеки Конгресса. Я успешно загрузил запись с помощью PyZ3950, но когда я пытаюсь проанализировать файл с помощью PyMarc, я получаю следующую ошибку:
Traceback (most recent call last):
File "test.py", line 13, in <module>
for record in reader:
File "build/bdist.macosx-10.9-intel/egg/pymarc/reader.py", line 83, in next
ValueError: invalid literal for int() with base 10: '<PyZ3'
И вот мой полный код:
from PyZ3950 import zoom, zmarc
from pymarc import MARCReader
conn = zoom.Connection('z3950.loc.gov', 7090)
conn.databaseName = 'VOYAGER'
conn.preferredRecordSyntax = 'USMARC'
query = zoom.Query('CCL', 'ti="1066 and all that"')
res = conn.search(query)
reader = MARCReader(str(res))
for record in reader:
print record.title()
conn.close()
1 ответ
Решение
Ваше заявление:
res = conn.search(query)
вернуть ResultSet
соответственно http://www.panix.com/~asl2/software/PyZ3950/zoom.html
Каждая запись r
в resultSet
иметь данные в r.data
Таким образом, вы должны кормить MARCReader с каждым r.data
или с ними все соединены.
Это будет работать:
from PyZ3950 import zoom, zmarc
from pymarc import MARCReader
conn = zoom.Connection('z3950.loc.gov', 7090)
conn.databaseName = 'VOYAGER'
conn.preferredRecordSyntax = 'USMARC'
query = zoom.Query('CCL', 'ti="1066 and all that"')
res = conn.search(query)
marc = ''
for r in res:
marc = marc + r.data
reader = MARCReader(marc)
for record in reader:
print record.title()
conn.close()