使用 Pymarc 讀取

書目資料

講者: 王婕瑜

日期: 2021/3/21

OUTLINE

  • MARC 簡介
  • Pymarc 簡介
  • 實作
  • Reference

MARC 簡介

MARC

Machine-Readable Cataloging Format

電腦閱讀及處理編目紀錄的格式

1960

美國國會圖書館

1980

UNIMARC

2001

中國機讀編目

1989

全國合作編目系統採用

舉個例子

中國機讀編目格式

010 0  $b精裝$d新台幣170元

100    1986

101 1  chi$ceng

102    tw

200 1  圖書館學槪論$e圖書館服務的基本要素$f傑西.薛拉(Jesse H. Shera)著$g鄭肇陞譯$rT'u shu kuan  hs! $aeh kai lun

210    新竹市$c楓城$d民75[1986]

225 1  楓城學術叢書$rFeng ch'eng hsueh shu ts'ung shu

欄位

欄位 說明
010 國際標準書號(ISBN)
101 作品語文
102 出版國別
200 題名及著者敘述項
210 出版項
225 集叢項

Pymarc 簡介

Pymarc

安裝

pip install pymarc

處理以 MARC 21 編碼的書目資料

  1. 閱讀
  2. 寫入
  3. 更新

檔案存取

開啟檔案

f.open(file, mode)

存取檔案

f.read()

關閉檔案

f.close()

開啟檔案

f = open(file, mode)

檔案名稱

開啟檔案的模式

模式 說明
'r' 讀取,預設模式
'w' 寫入,會覆蓋檔案內容
'a' 寫入,若已有內容則附加在末端
'b' 按照二進位制位讀取

取得全部資料

from pymarc import MARCReader
with open("t.marc", 'rb') as data:
    reader = MARCReader(data)
    for record in reader:
        print(record)

欄位

  • author
  • isbn
  • subjects
  • location
  • notes
  • physicaldescription
  • publisher
  • pubyear
  • issn
  • issn_title
for record in reader:
  print(record['245'])

取得某欄位

for record in reader:
# for each field
	for f in record.get_fields('650'):
    print(f)
#for each record
for record in reader:
  print(record.title())

取得某欄位內某段的資料

for record in reader:
	print ("Subfield 'a':", record['245']['a'])
	print ("Subfield 'b':", record['245']['b'])
	print ("Subfield 'c':", record['245']['c'])

010 0  $b精裝$d新台幣170元

200 1  圖書館學槪論$e圖書館服務的基本要素$f傑西.薛拉(Jesse H. Shera)著$g鄭肇陞譯$rT'u shu kuan  hs! $aeh kai lun

210    新竹市$c楓城$d民75[1986]

010 0  $b精裝$d新台幣170元

200 1  圖書館學槪論$e圖書館服務的基本要素$f傑西.薛拉(Jesse H. Shera)著$g鄭肇陞譯$rT'u shu kuan  hs! $aeh kai lun

210    新竹市$c楓城$d民75[1986]

欄位缺失

try:
  print(record['650']['a'])
  except:
    print('無主題詞')
if record['035'] is not None:
  print(record['035']['a'])

LAB

統計850類書籍的主題

 

Hint:

主題此欄位可以重複

參考作法

from pymarc import MARCReader

with open('t.mrc', 'rb') as fh:
    reader = MARCReader(fh)
    for record in reader:
        if float(record['094']['a'][0:3]) < 860 and float(record['094']['a'][0:3]) >= 850:
            for f in record.get_fields('650'):
                print(f['a'])

Reference

  • 王梅玲 (2011). 機讀編目格式(MARC). Retrieved from: http://techserviceslibrary.blogspot.com/2011/04/marc.html
  • carpentries-incubator (2020). PyMARC Basics. Retrieved from: https://carpentries-incubator.github.io/pymarc_basics/aio/index.html

Thanks for listening.

使用 Pymarc 讀取書目資料

By juliewah

使用 Pymarc 讀取書目資料

SIRLA 109-2 This 15 Speech

  • 142