亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        用Python語言分析銀行自助設(shè)備交易流水文件

        2010-04-12 00:00:00何惠英付少波付蘭芳
        現(xiàn)代電子技術(shù) 2010年5期

        摘 要:無人值守銀行自助設(shè)備的運(yùn)行狀況是一項(xiàng)非常重要的內(nèi)容,維護(hù)者必須能夠及時(shí)分析并處理設(shè)備所出現(xiàn)的各種故障。自助設(shè)備交易流水文件詳細(xì)記錄了設(shè)備的運(yùn)行狀況,為了分析該文件,基于當(dāng)前流行的Python語言,并配合wxPython GUI包為軟件開發(fā)平臺(tái),開發(fā)了自助取款設(shè)備運(yùn)行狀況分析程序,該軟件具有開發(fā)周期短、界面友好、操作簡單的優(yōu)點(diǎn)。

        關(guān)鍵詞:python;流水記錄文件;分析工具;ATM

        中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A

        文章編號(hào):1004-373X(2010)05-131-04

        Journal Log Files of ATM Based on Python

        HE Huiying,F(xiàn)U Shaobo,AN Ju,F(xiàn)U Lanfang

        (Academy of Military Transportation,Tianjin,300161,China)

        Abstract:ATM′s running is very important,vindicator must analyse and deal with each fault in time and generally.ATM′s running program is developed,based on popular Python language with wxPython GUI toolkit.This method has short development period and friendly interface and simple operation.

        Keywords:python;journal log files;analysis tool;ATM

        銀行自助設(shè)備為用戶的銀行交易提供更多的方便,可以24 h為用戶提供服務(wù)。目前隨著銀行卡發(fā)行量的增多,銀行自助取款設(shè)備的使用頻率在逐步提高。但因自助取款設(shè)備無人值守的特點(diǎn),設(shè)備的運(yùn)行狀況便成了一個(gè)非常重要的關(guān)注點(diǎn)。目前除了實(shí)時(shí)的監(jiān)控系統(tǒng)之外,流水記錄文件的分析便是機(jī)器運(yùn)行狀況的主要參考內(nèi)容。從機(jī)器流水記錄中可以分析機(jī)器的運(yùn)行狀況、各周期交易量、正常及異常的交易明細(xì)等。大多自助設(shè)備的交易量很大,每日可達(dá)幾百筆業(yè)務(wù),這樣,多臺(tái)機(jī)器經(jīng)過幾個(gè)周期運(yùn)行之后的數(shù)據(jù)量很大,這無疑給設(shè)備的故障分析工作帶來了很大的難度。因此,專為流水記錄文件寫一個(gè)分析軟件便顯得非常迫切?;谠摫尘?,介紹如何使用Python語言開發(fā)分析流水記錄文件工具的過程。

        1 Python語言介紹

        Python是免費(fèi)的解釋性語言[1],具有面向?qū)ο蟮奶匦裕梢赃\(yùn)行在多種操作系統(tǒng)之上,它繼承了傳統(tǒng)編譯語言的強(qiáng)大性和通用性,同時(shí)也借鑒了簡單腳本和解釋語言的易用性。Python具有清晰的結(jié)構(gòu)、簡潔的語法以及強(qiáng)大的功能,可以完成從文本處理到網(wǎng)絡(luò)通信等各種工作,并且其自身已經(jīng)提供了大量的模塊來實(shí)現(xiàn)各種功能,除此以外還可以使用C/C++來擴(kuò)展,甚至還可以將其嵌入到其他語言中。

        Python語言特點(diǎn)[2]:

        (1) 自由軟件:遵循GPL協(xié)議,不需要支持任何費(fèi)用,也不用擔(dān)心版權(quán)問題,可閱讀其源代碼。

        (2) 跨平臺(tái):Python最初是在MAC操作系統(tǒng)下實(shí)現(xiàn)的,有很強(qiáng)的移植性,可運(yùn)行在多種流水行操作系統(tǒng)之上,如Linux,Windows,MAC等。

        (3) 功能強(qiáng)大:可以使用在多個(gè)領(lǐng)域,如系統(tǒng)編程,幫助用戶完成繁瑣的日常工作;科學(xué)計(jì)算,它簡潔的語法可以像使用計(jì)算器一樣來完成科學(xué)計(jì)算;快速原型,它省去了編譯調(diào)試的過程,可以快速地實(shí)現(xiàn)系統(tǒng)原形;Web編程,使用它可以編寫CGI,而現(xiàn)在流行的Web框架也可以使用Python實(shí)現(xiàn)。

        (4) 可擴(kuò)展:通過使用C/C++可以對Python進(jìn)行擴(kuò)展;Python也可以嵌入到C/C++編寫的程序之中。在某些情況下,它可以作為動(dòng)態(tài)鏈接庫的替代品在C/C++中使用。

        (5) 易學(xué)易用:語法簡單;使用變量時(shí)無需事先聲明;使用Python不必關(guān)心內(nèi)在的使用,它會(huì)自動(dòng)地分配、回收內(nèi)存;Python提供了強(qiáng)大的內(nèi)置對象和方法,如本文使用的open()方法;使用Python可以減少其他編程語言的復(fù)雜性,例如在C語言中使用數(shù)十行代碼實(shí)現(xiàn)的排序,而在Python中,可以使用列表的排序函數(shù)輕易完成。

        2 流水記錄文件特性

        流水記錄文件是記錄機(jī)器運(yùn)行狀態(tài)的log文件,包含機(jī)器運(yùn)行時(shí)的各種硬件狀態(tài)、網(wǎng)絡(luò)狀態(tài)、用戶操作記錄、管理員操作記錄等內(nèi)容,是分析機(jī)器運(yùn)行狀況具的重要依據(jù)之一。

        (1) 文件類型:以日期命名的純文本格式文件。

        (2) 文件內(nèi)容:交易時(shí)機(jī)器狀態(tài)及相關(guān)交易信息;

        操作員對機(jī)器的操作記錄;

        待機(jī)時(shí)機(jī)器當(dāng)前狀態(tài);

        網(wǎng)絡(luò)鏈接狀態(tài);

        機(jī)器重啟時(shí)的相關(guān)信息等。

        (3) 文件關(guān)鍵字:插卡日期、卡號(hào)、交易類別、交易金額、交易成功標(biāo)志、交易失敗標(biāo)志、失敗原因、網(wǎng)絡(luò)故障等。

        (4) 文件位置:位于ATM機(jī)器硬盤內(nèi),部分文件同步于銀行后臺(tái)主機(jī)。

        3 基于Python語言開發(fā)的分析流水記錄文件工具

        3.1 開發(fā)原理

        通過Python語言的內(nèi)置函數(shù)open()來打開流水文件[3],返回一個(gè)文件對象,然后用for循環(huán)遍歷這個(gè)流水文件對象,通過字符串匹配的方式來查找主要關(guān)鍵字并保存相關(guān)信息,然后計(jì)算生成所需要的各種字符串信息或列表供分析使用。

        3.2 環(huán)境介紹

        開發(fā)語言:Python 2.5.4

        界面框架:wxPython 2.8-win32-unicode-2.8.10.1-py25;

        運(yùn)行環(huán)境:所有 Unix 衍生系統(tǒng)(Linux,MacOS X,Solaris,F(xiàn)reeBSD等),Win32家族(Windows NT,2000,XP 等),

        早期平臺(tái):MacOS 8/9,Windows 3.x,DOS,OS/2,AIX[4]。

        3.3 程序?qū)崿F(xiàn)

        該程序采用面向?qū)ο蟮木幊谭椒▉韺Ω鱾€(gè)模塊的功能進(jìn)行實(shí)現(xiàn),JrnAnalyse.pyw 來初始化程序,并調(diào)用mainframe模塊進(jìn)行程序界面顯示,在mainframe模塊中調(diào)用jrn模塊進(jìn)行流水文件分析,jrn模塊返回分析結(jié)果給mainframe模塊進(jìn)行顯示或是存盤。程序框圖如圖1所示。

        3.3.1 Python實(shí)現(xiàn)處理文件

        文件也可以看作是Python中的數(shù)據(jù)類型。當(dāng)使用Python的內(nèi)置函數(shù)open打開一個(gè)文件時(shí),返回一個(gè)文件對象。其原型如下所示 [5]:

        open(filename,mode,bufsize)

        其參數(shù)含義如下:

        filename:要打開的文件名。

        mode:可選參數(shù),文件打開模式。

        bufsize:可選參數(shù),緩沖區(qū)大小。

        其中mode可以是″r″表示讀方式打開文件;″w″表示以寫方式打開文件;″b″表示以二進(jìn)制方式打開文件。

        圖1 程序框圖

        open()成功執(zhí)行并返回一個(gè)文件對象之后,所有對該文件的后續(xù)操作都將通過這個(gè)“句柄”進(jìn)行。文件方法可以分為四類:輸入,輸出,文件內(nèi)移動(dòng),以及雜項(xiàng)操作。以下介紹要用到的幾個(gè)最基本的方法:

        file.write():向文件中寫入字符串,使用此方法來保存成功交易明細(xì)或疑問帳信息[6]。

        file.close():關(guān)閉打開的文件

        對所打開的文件對象進(jìn)行遍歷來查找所需要的信息,是進(jìn)行流水記錄分析的重要過程,示例如下:

        file=open(″filename″,″rU″)

        #U參數(shù)可解決文件結(jié)束符不統(tǒng)一的問題,如\\\\r會(huì)替換為\\\,這樣在用for循環(huán)的時(shí)候就統(tǒng)一了行結(jié)束標(biāo)志。

        for line in file: #使用for循環(huán)對文件對象file進(jìn)行遍歷,line為filename中的每一行數(shù)據(jù)。

        print line#此例為打印line數(shù)據(jù)到屏幕

        3.3.2 wxPython實(shí)現(xiàn)GUI界面顯示

        wxPython是跨平臺(tái)工具庫wxWidgets的封裝。wxWidgets庫是由C++編寫的,它類似于Windows的MFC[7]。wxWidgets提供了對多種操作系統(tǒng)的支持。由于它良好的可移植性,wxPython也具備了跨平臺(tái)的能力。在Python中使用wxPython可以編寫具有跨平臺(tái)能力的GUI腳本。

        這里介紹能夠顯示圖形界面的幾個(gè)主要步驟:

        # -*- coding:utf-8 -*-

        import wx

        class MyApp(wx.App):

        def OnInit(self):

        frame=wx.Frame(parent=None,title=′Hello,wxPython!′)

        frame.Show()

        return True

        app=MyApp()

        app.MainLoop()

        開頭指定使用utf-8字符編碼,可顯示中文字符串。首先導(dǎo)入wx模塊,即wxPython。然后繼承wx模塊中的App類創(chuàng)建了一個(gè)MyApp類[8]。在Myapp類中重載了OnInit方法。OnInit方法是窗口初始化的一部分,在該方法中創(chuàng)建了一個(gè)窗口框架,并顯示該窗口。一般來講,OnInit方法最后應(yīng)返回True。最后兩行,將MyApp類實(shí)例化成app對象,然后調(diào)用其MainLoop方法進(jìn)入消息循環(huán)。

        3.3.3 程序結(jié)構(gòu)

        (1) 程序啟動(dòng)文件:JrnAnalyse.pyw

        # -*- coding:utf-8 -*-

        ″″″

        atmtool.py:A tool for analyse atm jounarl files# 文件注釋

        ″″″

        import wx #導(dǎo)入wxpython模塊

        import mainframe#導(dǎo)入mainframe模塊

        class AtmApp(wx.App):#定義啟動(dòng)類

        def_init_(self,redirect=False,filename=None):# 重載生成對象時(shí)初始化方法

        wx.App._init_(self,redirect,filename)

        def OnInit(self):# 重載窗口初始化方法

        self.main=mainframe.CreatMainframe(None)

        self.main.Show()

        self.SetTopWindow(self.main)

        return True

        if _name_ == ″_main_″:# 作為獨(dú)立程序啟動(dòng)

        application=AtmApp()

        application.MainLoop()

        (2) 界面顯示模塊:mainframe.py

        在該模塊中定義了各種顯示組件、界面組件操作方法;各方法列表如下:

        def _init_(self,parent):# 定義并初始化各種顯示組件

        def openDir(self):# 定義打開打開流水文件方法

        def runJrn(self): # 定義調(diào)用流水分析模塊方法

        def On_Quit(self,event):# 定義退出程序方法

        def On_Help(self,event):# 定義幫助文件方法

        def On_About(self,event):# 定義關(guān)于程序方法

        def OnItemSelected(self,event):# 定義點(diǎn)擊列表方法

        def getColumnText(self,index,col):# 定義點(diǎn)擊選擇列表內(nèi)容方法

        def scroll2line(self,current_page):# 定義定位到疑問流水位置的方法

        def OnOkTrans(self,event):# 定義保存成功交易方法

        (3) 流水分析模塊:jrn.py

        該模塊進(jìn)行每個(gè)流水記錄文件的分析工作。

        def get_date_card(self,line,jrnfp) [9]:# 定義獲取用戶交易日期卡號(hào)方法

        def get_cwd_amount(self,line):# 定義獲取用戶取款交易金額方法

        def get_dep_amount(self,line,jrnfp)# 定義獲取用戶存款交易金額方法

        def total(self,jrns):# 定義計(jì)算多周期交易匯總信息方法

        def question(self,jrns):# 定義獲取疑問交易方法

        def hardware(self,jrns):# 定義獲取機(jī)器硬件異常方法

        if _name_ == ″_main_″:# 流水模塊自省語句判斷

        下面將主要流水模塊中的分析情況舉例說明如下:

        獲取用戶交易日期和卡號(hào)例子:

        def get_date_card(self,line,jrnfp):

        date=″″

        card_no=″″

        if ′=AcceptCard′ in line:# 獲取插卡日期

        date=line

        cwd_amount=″″# 如果插卡則將cwd_amount清空

        elif ′CardType:′ in line# 獲取插卡卡號(hào)

        card_no=line# 將卡號(hào)保存在card_no變量中

        return date,card_no# 返回插卡日期和卡號(hào)

        獲取用戶取款交易金額例子:

        def get_cwd_amount(self,line,jrnfp):

        if ′-CWD Amount:′ in line:# 如果關(guān)鍵字-CWD Amount在本行中

        temp=line.split()[1]

        amount=int(temp.split(′:′)[1])# 將取款金額字符串轉(zhuǎn)成整形后保存

        return amount# 返回取款金額

        獲取用戶取款成功標(biāo)志例子:

        if ′WITHDRAWAL OK′ in line[10]:# 如果取款成功標(biāo)志在本行中

        cwd_ok_amount += amount# 累加取款金額

        cwd_ok_num += 1# 累加取款筆數(shù)

        money_taken=True# 只要條件匹配一次,就將取鈔標(biāo)志置真

        succeed_trans += (date.strip() + ″ ″ + card.strip() + ″ ″ + str(cwd_amount) + ″ cwd succeed\\\″) # 保存成功交易明細(xì)

        獲取用戶存款交易金額例子:

        def get_dep_amount(self,line,jrnfp):

        dep_amount=0

        if ′Amount:′ in line and ′TELLER:′ in line:#如果存款交易關(guān)鍵字在本行中

        temp=line.split()[1]

        dep_amount=int(temp.split(′:′)[1])#將存款金額字符串轉(zhuǎn)成整形后保存

        return dep_amount# 返回存款金額

        獲取用戶存款成功標(biāo)志例子:

        if ″CASH IN NOTES OK″ in line:# 如果成功取款標(biāo)志在本行中

        dep_ok_amount += dep_amount# 累加存款金額

        dep_ok_num += 1# 累加存款筆數(shù)

        cash_stored=True# 只要條件匹配一次,就將存鈔標(biāo)志置真

        succeed_trans += (date.strip() + ″ ″ + card.strip() + ″ ″ + str(dep_amount) + ″ dep succeed\\\″)

        # 保存成功交易明細(xì)

        獲取管理員清機(jī)加鈔標(biāo)志:

        if ′---RefillCash---′ in line:# 獲取加鈔標(biāo)志

        Here do what you want

        程序運(yùn)行示例:圖2是打開了多個(gè)流水記錄文件后程序的運(yùn)行顯示效果圖。

        上左:疑問交易明細(xì) 上右:疑問交易概覽

        下左:各周期交易匯總下右:硬件關(guān)鍵信息

        圖2 運(yùn)行顯示效果圖

        4 結(jié) 語

        本文所述的基于Python語言的流水分析工具在分析自助設(shè)備運(yùn)行狀況中得到了很好的應(yīng)用,大大減少了

        設(shè)備維護(hù)者的工作量。在一個(gè)交易周期還未結(jié)束時(shí),就可提前發(fā)現(xiàn)已經(jīng)出現(xiàn)的疑問帳務(wù),對于由于網(wǎng)絡(luò)問題而導(dǎo)致服務(wù)器記錄缺失現(xiàn)象有很大幫助,同時(shí)也提高了對客戶的服務(wù)水平。基于此方法,還可以用Python語言編寫分析工具來分析其他領(lǐng)域的記錄文件。

        參考文獻(xiàn)

        [1]Mark Lutz.Learning Python[M].3版.南京:東南大學(xué)出版社,2008.

        [2][美]Wesley J Chun.Python核心編程[M].2版.宋吉廣,譯.北京:人民郵電出版社,2007.

        [3]孫廣磊.征服Python——語言基礎(chǔ)與典型應(yīng)用[M].北京:人民郵電出版社,2007.

        [4]NOEL RAPPIN.wxPython in Action[M].Manning Publications Co.,2006.

        [5]Alex Martelli.Python in a Nutshell[M].2nd Edition.O′Reilly,2006.

        [6]Magnus Lie Hetland.Beginning Python From Novice to Professional[M].Second Edition.2008.

        [7]Tarek Ziadé.Expert Python Programming[M].Packt Publishing Ltd.2008.

        [8]Jim Knowlton.Python?:Create-Modify-Reuse[M].Wiley Publishing Inc..2008.

        [9]Mark Lutz.Programming Python[M].3rd Edition.O′Reilly,2006.

        [10]David Mertz.Text Processing in Python[M].Addison Wesley,2003.

        正在播放国产多p交换视频| 脱了老师内裤猛烈进入| 人妻少妇乱子伦精品无码专区电影| 嫩草影院未满十八岁禁止入内| 91亚洲欧洲日产国码精品| 国产精品自拍网站在线| 国产精品美女久久久免费| 亚洲美腿丝袜 欧美另类| 亚洲AV无码国产永久播放蜜芽| 精品一区二区三区女同免费| 麻豆视频在线播放观看| 欧美成人片在线观看| 正在播放国产多p交换视频| 一区二区三区国产偷拍| 男女交射视频免费观看网站| 性高朝大尺度少妇大屁股| 国产尤物AV尤物在线看| 在线亚洲精品国产成人二区| 日本一二三四高清在线| 一本本月无码-| 国产亚洲欧美日韩综合一区在线观看 | 久久精见国产亚洲av高清热| 精品国产偷窥一区二区| 亚洲av色先锋资源电影网站| 亚洲精品综合在线影院| 蜜桃视频在线免费视频| 亚洲人成色7777在线观看| 99热精品成人免费观看| 久久亚洲av午夜福利精品西区| 又硬又粗进去好爽免费| 亚洲熟女综合一区二区三区| 久久与欧美视频| 久久精品国产亚洲av麻豆床戏| 又粗又硬又大又爽免费视频播放| 日韩毛片基地一区二区三区| 国产三级av在线播放| 亚洲第一女人av| 亚洲欧美日韩综合久久| 国产西西裸体一级黄色大片| 亚洲中文字幕久久精品一区| 国语精品一区二区三区|