辛海濱
摘要:報(bào)紙是圖書(shū)館館藏的重要組成部分,但由于缺乏系統(tǒng)支持等原因,報(bào)紙的日常管理比較復(fù)雜。該文通過(guò)采用Python語(yǔ)言和第三方Excel操作模
xlwt研究自動(dòng)生成報(bào)紙記到單,用以進(jìn)行報(bào)紙的管理,能夠有效降低管理成本,提高工作效率。
關(guān)鍵詞:圖書(shū)館;報(bào)紙記到單;Python;自動(dòng)生成
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2019)33-0041-02
報(bào)紙是一種主要的連續(xù)出版物,具有內(nèi)容豐富、出版周期短、傳播速度快和時(shí)效性強(qiáng)等特點(diǎn),是圖書(shū)館館藏文獻(xiàn)的重要組成部分。我國(guó)報(bào)紙種類(lèi)繁多,2017年,全國(guó)共出版報(bào)紙1884種。各圖書(shū)館根據(jù)自身職責(zé)和需求,都會(huì)訂購(gòu)不同數(shù)量的報(bào)紙并陳列于報(bào)紙閱覽室供讀者查閱,這為圖書(shū)館的報(bào)紙管理工作提出了挑戰(zhàn)。
圖書(shū)館報(bào)紙的管理不同于圖書(shū)和期刊。圖書(shū)經(jīng)分編、加工后即可完成人藏,期刊的出版周期通常為月、雙月、旬和季等,到刊后即可完成系統(tǒng)記到。但報(bào)紙存在出版頻率快、訂購(gòu)的種類(lèi)多、上架及時(shí)性要求高、缺乏系統(tǒng)支持等因素的影響,使得其管理更加復(fù)雜。報(bào)紙因其內(nèi)容的新聞性、大眾性等特點(diǎn),成為公共圖書(shū)館文獻(xiàn)采購(gòu)中重要的類(lèi)型,如2016年廈門(mén)圖書(shū)館采購(gòu)中文報(bào)紙213種。每日到館的大量報(bào)紙需及時(shí)記到后,才能進(jìn)行人藏、上架閱覽、催缺等工作。當(dāng)前,大多數(shù)圖書(shū)館業(yè)務(wù)管理系統(tǒng)如Interlib、ILAS等都沒(méi)有進(jìn)行報(bào)紙日常管理的模塊。通過(guò)制作報(bào)紙記到表,進(jìn)行手工記到管理是一種報(bào)紙管理有效的方法。工作實(shí)踐中,圖書(shū)館通常采用Excel列出報(bào)紙名稱(chēng)和日期等,按出版周期制作記到表。但是圖書(shū)館訂購(gòu)報(bào)紙種類(lèi)多,且各種報(bào)紙出版周期不一,給制作報(bào)紙記到表造成了困難。研究開(kāi)發(fā)軟件自動(dòng)生成報(bào)紙記到單,幫助工作人員從復(fù)雜的推算、編制過(guò)程中解放出來(lái),具有實(shí)踐意義,能夠有效提升記到單制作的準(zhǔn)確率,提高工作效率。
本文應(yīng)用Python語(yǔ)言和第三方Excel操作模塊xlwt,在充分了解、分析實(shí)際工作中報(bào)紙管理需求的基礎(chǔ)上,開(kāi)發(fā)報(bào)紙記到單自動(dòng)生成軟件。
1技術(shù)介紹和需求分析
Python語(yǔ)言誕生于1989年,是一種面向?qū)ο?、解釋型?jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。Pvthon語(yǔ)法簡(jiǎn)潔、功能強(qiáng)大、支持跨平臺(tái)操作且易于學(xué)習(xí)。它是一種開(kāi)放的語(yǔ)言,擁有完備的標(biāo)準(zhǔn)庫(kù),以及大量開(kāi)發(fā)者開(kāi)發(fā)的第三方模塊,這些都為Python提供了強(qiáng)大的功能。
xlwt模塊是第三方Excel文檔寫(xiě)入模塊,支持Excel文檔創(chuàng)建以及指定表單、指定單元格的格式化寫(xiě)入操作。datetime模塊和calendar模塊都是python內(nèi)置的處理日期和時(shí)間的模塊。datetime模塊提供了大量處理日期和時(shí)間的類(lèi)和方法,支持格式化輸出與便捷的屬性提取操作。calendar模塊是日歷模塊,提供了標(biāo)準(zhǔn)的類(lèi)和方法處理來(lái)日歷,如便捷的獲取特定月份的天數(shù)等。
圖書(shū)館每年訂購(gòu)大量的報(bào)紙,報(bào)紙的高頻率出版發(fā)行以及當(dāng)前大部分圖書(shū)館業(yè)務(wù)管理系統(tǒng)報(bào)紙管理的缺位,使得部分圖書(shū)館采用紙質(zhì)記到單來(lái)管理報(bào)紙。記到單中每種報(bào)紙出版周期不同,需逐項(xiàng)填制,為圖書(shū)館工作造成了困難。報(bào)紙記到單的自動(dòng)生成是在當(dāng)年報(bào)紙訂購(gòu)清單的基礎(chǔ)上,利用PYthon分析各報(bào)紙的出版周期,生成報(bào)紙記到單,實(shí)現(xiàn)記到單制作的自動(dòng)化。
報(bào)紙文檔。報(bào)紙文檔是存儲(chǔ)圖書(shū)館當(dāng)年訂購(gòu)的所有報(bào)紙種類(lèi)的格式化信息的文本文件,一種報(bào)紙為一行。文檔中的報(bào)紙由序號(hào)、郵發(fā)代號(hào)、報(bào)紙名稱(chēng)和出版周期四項(xiàng)組成。序號(hào)為給定報(bào)紙的排架號(hào)。郵發(fā)代號(hào),又稱(chēng)報(bào)刊代號(hào),是郵局為了便于郵遞員識(shí)別和讀者訂購(gòu)為報(bào)刊分配的代號(hào)。出版周期是報(bào)紙的出版時(shí)間,周1-7表示每天出版、周1-6表示周一至周六出版、周2.3.5表示周二周三周五出版等等。同時(shí),報(bào)紙文檔中報(bào)紙信息內(nèi)容的修改會(huì)更改記到單的輸出結(jié)果。因此,當(dāng)報(bào)紙名稱(chēng)、序號(hào)和出版周期發(fā)生變化時(shí),可直接操作修改報(bào)紙文檔信息,新生成的記到單中報(bào)紙信息就會(huì)更新為最終狀態(tài)。
報(bào)紙記到單。報(bào)紙記到單是由報(bào)紙信息和應(yīng)到日期組成表格,分為標(biāo)題、表頭和表體三部分。標(biāo)題部分是記到單的名稱(chēng),體現(xiàn)了記到單的適用日期。記到單的表頭部分前面四項(xiàng)對(duì)應(yīng)報(bào)紙的信息,分別為序號(hào)、郵發(fā)代號(hào)、報(bào)紙名稱(chēng)和出版周期,后面為相應(yīng)日期對(duì)應(yīng)的周日,如圖1所示。
圖1中,位于表頭下方的是表體部分。表體中,報(bào)紙信息右側(cè)部分連續(xù)的數(shù)字表示日期。日期根據(jù)報(bào)紙的出版周期選擇填寫(xiě),即,若當(dāng)日該報(bào)紙出版則填寫(xiě)日期,否則不填寫(xiě)。這樣,記到單中,有日期的單元格表示當(dāng)日?qǐng)?bào)紙應(yīng)到,空白則表示當(dāng)日?qǐng)?bào)紙不出版,簡(jiǎn)潔的版面能夠幫助工作人員清晰管理報(bào)紙。
2出版周期處理
首先程序讀取報(bào)紙文檔,生成報(bào)紙列表paper_list,進(jìn)而從報(bào)紙的出版周期項(xiàng)生成出版周期列表,以判斷特定日期,報(bào)紙是否出版。報(bào)紙文檔中的出版周期為符合特定格式的文字表述,不利于計(jì)算機(jī)程序識(shí)別。以報(bào)紙列表為參數(shù),將文字表述的出版周期轉(zhuǎn)換成由報(bào)紙序號(hào)和出版日期組成的出版周期列表pubcycle_list,有利于計(jì)算機(jī)操作判斷報(bào)紙出版日期。代碼實(shí)現(xiàn)如下:
報(bào)紙記到單的表頭部分為對(duì)應(yīng)日期的周日。datetime模塊提供的isoweekday函數(shù)能夠通過(guò)日期生成對(duì)應(yīng)的周日,生成的周日是用阿拉伯?dāng)?shù)字表示的,1表示周一、2表示周二等等,以此類(lèi)推,這種表示方法與出版周期列表pubcycle_list的表示方法相同。
為便于工作人員清晰識(shí)別報(bào)紙的應(yīng)到日期,表1所示的記到單中,在應(yīng)到日期對(duì)應(yīng)的單元格填寫(xiě)該日期,其余單元格則不填寫(xiě)。這就要求對(duì)特定日期判斷是否出版報(bào)紙,為此,首先要通過(guò)報(bào)紙序號(hào)從出版周期列表paper_list中定位出該報(bào)紙的出版周期,然后判斷該日期對(duì)應(yīng)的周日是否存在于該報(bào)紙的出版周期列表中,若存在,則返回了rue,否則,返回False。代碼實(shí)現(xiàn)如下:
3生成記到單
生成Excel格式的記到單,采用了第三方模塊xlwt提供的類(lèi)和方法。首先建立Excel文檔和表格,將特定月份的報(bào)紙應(yīng)到信息,寫(xiě)入表格中。限于紙張大小,一個(gè)表格只記到半個(gè)月的信息。創(chuàng)建Excel文檔與表格的代碼如下:
新創(chuàng)建的表格中帶有頁(yè)眉和頁(yè)腳內(nèi)容,通過(guò)修改代碼清空頁(yè)眉頁(yè)腳信息,或者更改為其他內(nèi)容。
寫(xiě)入標(biāo)題并進(jìn)行格式設(shè)置。如圖1所示,表題中的“報(bào)紙記到單”前要加上年月,以指明該記到單對(duì)應(yīng)的時(shí)期。通過(guò)da-t~ime模塊中today函數(shù),獲取當(dāng)前日期date。記到單中,標(biāo)題要居中排列,xlwt的XFStyle類(lèi)提供了單元格格式的設(shè)置功能,Alignment類(lèi)提供了單元格文本對(duì)齊方式的設(shè)置功能。構(gòu)建對(duì)象alignment和bt_style來(lái)設(shè)置標(biāo)題居中對(duì)齊。記到單中的標(biāo)題占據(jù)多列,需要合并單元格,xlwt提供了write_merge函數(shù)實(shí)現(xiàn)多行多列的單元格合并填寫(xiě)內(nèi)容的功能。寫(xiě)入標(biāo)題的代碼如下:
寫(xiě)入表體。創(chuàng)建的isPubDay方法實(shí)現(xiàn)了通過(guò)出版周期判斷特定日期是否出版報(bào)紙的功能。表體的寫(xiě)入分為報(bào)紙信息和相應(yīng)月份日期兩部分,填寫(xiě)日期時(shí),根據(jù)isPubDay方法的判斷結(jié)果來(lái)決定是否填寫(xiě)。寫(xiě)入表體的代碼如下:
row=2
4結(jié)束語(yǔ)
隨著社會(huì)經(jīng)濟(jì)的發(fā)展,公共圖書(shū)館的報(bào)紙訂購(gòu)數(shù)量也在逐年攀升,工作人員更加依賴(lài)通過(guò)記到單標(biāo)記到館、休刊、缺報(bào)及催補(bǔ)等,實(shí)現(xiàn)報(bào)紙的便捷管理。報(bào)紙記到單的自動(dòng)生成能夠有效降低報(bào)紙管理成本,提升工作效率,有利于提升讀者服務(wù)水平和滿意度。