用Python语言分析银行自助设备交易流水文件.docx

上传人:b****5 文档编号:6516201 上传时间:2023-01-07 格式:DOCX 页数:8 大小:21.11KB
下载 相关 举报
用Python语言分析银行自助设备交易流水文件.docx_第1页
第1页 / 共8页
用Python语言分析银行自助设备交易流水文件.docx_第2页
第2页 / 共8页
用Python语言分析银行自助设备交易流水文件.docx_第3页
第3页 / 共8页
用Python语言分析银行自助设备交易流水文件.docx_第4页
第4页 / 共8页
用Python语言分析银行自助设备交易流水文件.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

用Python语言分析银行自助设备交易流水文件.docx

《用Python语言分析银行自助设备交易流水文件.docx》由会员分享,可在线阅读,更多相关《用Python语言分析银行自助设备交易流水文件.docx(8页珍藏版)》请在冰豆网上搜索。

用Python语言分析银行自助设备交易流水文件.docx

用Python语言分析银行自助设备交易流水文件

用Python语言分析银行自助设备交易流水文件

作者:

何惠英付少波安居付兰芳

来源:

《现代电子技术》2010年第05期

        摘要:

无人值守银行自助设备的运行状况是一项非常重要的内容,维护者必须能够及时分析并处理设备所出现的各种故障。

自助设备交易流水文件详细记录了设备的运行状况,为了分析该文件,基于当前流行的Python语言,并配合wxPythonGUI包为软件开发平台,开发了自助取款设备运行状况分析程序,该软件具有开发周期短、界面友好、操作简单的优点。

        关键词:

python;流水记录文件;分析工具;ATM

        中图分类号:

TP311文献标识码:

A

        文章编号:

1004-373X(2010)05-131-04

        JournalLogFilesofATMBasedonPython

        HEHuiying,FUShaobo,ANJu,FULanfang

        (AcademyofMilitaryTransportation,Tianjin,300161,China)

        Abstract:

ATM′srunningisveryimportant,vindicatormustanalyseanddealwitheachfaultintimeandgenerally.ATM′srunningprogramisdeveloped,basedonpopularPythonlanguagewithwxPythonGUItoolkit.Thismethodhasshortdevelopmentperiodandfriendlyinterfaceandsimpleoperation.

        Keywords:

python;journallogfiles;analysistool;ATM

        银行自助设备为用户的银行交易提供更多的方便,可以24h为用户提供服务。

目前随着银行卡发行量的增多,银行自助取款设备的使用频率在逐步提高。

但因自助取款设备无人值守的特点,设备的运行状况便成了一个非常重要的关注点。

目前除了实时的监控系统之外,流水记录文件的分析便是机器运行状况的主要参考内容。

从机器流水记录中可以分析机器的运行状况、各周期交易量、正常及异常的交易明细等。

大多自助设备的交易量很大,每日可达几百笔业务,这样,多台机器经过几个周期运行之后的数据量很大,这无疑给设备的故障分析工作带来了很大的难度。

因此,专为流水记录文件写一个分析软件便显得非常迫切。

基于该背景,介绍如何使用Python语言开发分析流水记录文件工具的过程。

        1Python语言介绍

        Python是免费的解释性语言[1],具有面向对象的特性,可以运行在多种操作系统之上,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。

Python具有清晰的结构、简洁的语法以及强大的功能,可以完成从文本处理到网络通信等各种工作,并且其自身已经提供了大量的模块来实现各种功能,除此以外还可以使用C/C++来扩展,甚至还可以将其嵌入到其他语言中。

        Python语言特点[2]:

        

(1)自由软件:

遵循GPL协议,不需要支持任何费用,也不用担心版权问题,可阅读其源代码。

        

(2)跨平台:

Python最初是在MAC操作系统下实现的,有很强的移植性,可运行在多种流水行操作系统之上,如Linux,Windows,MAC等。

        (3)功能强大:

可以使用在多个领域,如系统编程,帮助用户完成繁琐的日常工作;科学计算,它简洁的语法可以像使用计算器一样来完成科学计算;快速原型,它省去了编译调试的过程,可以快速地实现系统原形;Web编程,使用它可以编写CGI,而现在流行的Web框架也可以使用Python实现。

        (4)可扩展:

通过使用C/C++可以对Python进行扩展;Python也可以嵌入到C/C++编写的程序之中。

在某些情况下,它可以作为动态链接库的替代品在C/C++中使用。

        (5)易学易用:

语法简单;使用变量时无需事先声明;使用Python不必关心内在的使用,它会自动地分配、回收内存;Python提供了强大的内置对象和方法,如本文使用的open()方法;使用Python可以减少其他编程语言的复杂性,例如在C语言中使用数十行代码实现的排序,而在Python中,可以使用列表的排序函数轻易完成。

        2流水记录文件特性

        流水记录文件是记录机器运行状态的log文件,包含机器运行时的各种硬件状态、网络状态、用户操作记录、管理员操作记录等内容,是分析机器运行状况具的重要依据之一。

        

(1)文件类型:

以日期命名的纯文本格式文件。

        

(2)文件内容:

交易时机器状态及相关交易信息;

        操作员对机器的操作记录;

        待机时机器当前状态;

        网络链接状态;

        机器重启时的相关信息等。

        (3)文件关键字:

插卡日期、卡号、交易类别、交易金额、交易成功标志、交易失败标志、失败原因、网络故障等。

        (4)文件位置:

位于ATM机器硬盘内,部分文件同步于银行后台主机。

        3基于Python语言开发的分析流水记录文件工具

        3.1开发原理

        通过Python语言的内置函数open()来打开流水文件[3],返回一个文件对象,然后用for循环遍历这个流水文件对象,通过字符串匹配的方式来查找主要关键字并保存相关信息,然后计算生成所需要的各种字符串信息或列表供分析使用。

        3.2环境介绍

        开发语言:

Python2.5.4

        界面框架:

wxPython2.8-win32-unicode-2.8.10.1-py25;

        运行环境:

所有Unix衍生系统(Linux,MacOSX,Solaris,FreeBSD等),Win32家族(WindowsNT,2000,XP等),

        早期平台:

MacOS8/9,Windows3.x,DOS,OS/2,AIX[4]。

        3.3程序实现

        该程序采用面向对象的编程方法来对各个模块的功能进行实现,JrnAnalyse.pyw来初始化程序,并调用mainframe模块进行程序界面显示,在mainframe模块中调用jrn模块进行流水文件分析,jrn模块返回分析结果给mainframe模块进行显示或是存盘。

程序框图如图1所示。

        3.3.1Python实现处理文件

        文件也可以看作是Python中的数据类型。

当使用Python的内置函数open打开一个文件时,返回一个文件对象。

其原型如下所示[5]:

        open(filename,mode,bufsize)

        其参数含义如下:

        filename:

要打开的文件名。

        mode:

可选参数,文件打开模式。

        bufsize:

可选参数,缓冲区大小。

        其中mode可以是″r″表示读方式打开文件;″w″表示以写方式打开文件;″b″表示以二进制方式打开文件。

        图1程序框图

        open()成功执行并返回一个文件对象之后,所有对该文件的后续操作都将通过这个“句柄”进行。

文件方法可以分为四类:

输入,输出,文件内移动,以及杂项操作。

以下介绍要用到的几个最基本的方法:

        file.write():

向文件中写入字符串,使用此方法来保存成功交易明细或疑问帐信息[6]。

        file.close():

关闭打开的文件

        对所打开的文件对象进行遍历来查找所需要的信息,是进行流水记录分析的重要过程,示例如下:

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

        #U参数可解决文件结束符不统一的问题,如\\r会替换为\\n,这样在用for循环的时候就统一了行结束标志。

        forlineinfile:

#使用for循环对文件对象file进行遍历,line为filename中的每一行数据。

        printline#此例为打印line数据到屏幕

        3.3.2wxPython实现GUI界面显示

        wxPython是跨平台工具库wxWidgets的封装。

wxWidgets库是由C++编写的,它类似于Windows的MFC[7]。

wxWidgets提供了对多种操作系统的支持。

由于它良好的可移植性,wxPython也具备了跨平台的能力。

在Python中使用wxPython可以编写具有跨平台能力的GUI脚本。

        这里介绍能够显示图形界面的几个主要步骤:

        #-*-coding:

utf-8-*-

        importwx

        classMyApp(wx.App):

        defOnInit(self):

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

′)

        frame.Show()

        returnTrue

        app=MyApp()

        app.MainLoop()

        开头指定使用utf-8字符编码,可显示中文字符串。

首先导入wx模块,即wxPython。

然后继承wx模块中的App类创建了一个MyApp类[8]。

在Myapp类中重载了OnInit方法。

OnInit方法是窗口初始化的一部分,在该方法中创建了一个窗口框架,并显示该窗口。

一般来讲,OnInit方法最后应返回True。

最后两行,将MyApp类实例化成app对象,然后调用其MainLoop方法进入消息循环。

        3.3.3程序结构

        

(1)程序启动文件:

JrnAnalyse.pyw

        #-*-coding:

utf-8-*-

        ″″″

        atmtool.py:

Atoolforanalyseatmjounarlfiles#文件注释

        ″″″

        importwx#导入wxpython模块

        importmainframe#导入mainframe模块

        classAtmApp(wx.App):

#定义启动类

        def_init_(self,redirect=False,filename=None):

#重载生成对象时初始化方法

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

        defOnInit(self):

#重载窗口初始化方法

        self.main=mainframe.CreatMainframe(None)

        self.main.Show()

        self.SetTopWindow(self.main)

        returnTrue

        if_name_==″_main_″:

#作为独立程序启动

        application=AtmApp()

        application.MainLoop()

        

(2)界面显示模块:

mainframe.py

        在该模块中定义了各种显示组件、界面组件操作方法;各方法列表如下:

        def_init_(self,parent):

#定义并初始化各种显示组件

        defopenDir(self):

#定义打开打开流水文件方法

        defrunJrn(self):

#定义调用流水分析模块方法

        defOn_Quit(self,event):

#定义退出程序方法

        defOn_Help(self,event):

#定义帮助文件方法

        defOn_About(self,event):

#定义关于程序方法

        defOnItemSelected(self,event):

#定义点击列表方法

        defgetColumnText(self,index,col):

#定义点击选择列表内容方法

        defscroll2line(self,current_page):

#定义定位到疑问流水位置的方法

        defOnOkTrans(self,event):

#定义保存成功交易方法

        (3)流水分析模块:

jrn.py

        该模块进行每个流水记录文件的分析工作。

        defget_date_card(self,line,jrnfp)[9]:

#定义获取用户交易日期卡号方法

        defget_cwd_amount(self,line):

#定义获取用户取款交易金额方法

        defget_dep_amount(self,line,jrnfp)#定义获取用户存款交易金额方法

        deftotal(self,jrns):

#定义计算多周期交易汇总信息方法

        defquestion(self,jrns):

#定义获取疑问交易方法

        defhardware(self,jrns):

#定义获取机器硬件异常方法

        if_name_==″_main_″:

#流水模块自省语句判断

        下面将主要流水模块中的分析情况举例说明如下:

        获取用户交易日期和卡号例子:

        defget_date_card(self,line,jrnfp):

        date=″″

        card_no=″″

        if′=AcceptCard′inline:

#获取插卡日期

        date=line

        cwd_amount=″″#如果插卡则将cwd_amount清空

        elif′CardType:

′inline#获取插卡卡号

        card_no=line#将卡号保存在card_no变量中

        returndate,card_no#返回插卡日期和卡号

        获取用户取款交易金额例子:

        defget_cwd_amount(self,line,jrnfp):

        if′-CWDAmount:

′inline:

#如果关键字-CWDAmount在本行中

        temp=line.split()[1]

        amount=int(temp.split(′:

′)[1])#将取款金额字符串转成整形后保存

        returnamount#返回取款金额

        获取用户取款成功标志例子:

        if′WITHDRAWALOK′inline[10]:

#如果取款成功标志在本行中

        cwd_ok_amount+=amount#累加取款金额

        cwd_ok_num+=1#累加取款笔数

        money_taken=True#只要条件匹配一次,就将取钞标志置真

        succeed_trans+=(date.strip()+″″+card.strip()+″″+str(cwd_amount)+″cwdsucceed\\n″)#保存成功交易明细

        获取用户存款交易金额例子:

        defget_dep_amount(self,line,jrnfp):

        dep_amount=0

        if′Amount:

′inlineand′TELLER:

′inline:

#如果存款交易关键字在本行中

        temp=line.split()[1]

        dep_amount=int(temp.split(′:

′)[1])#将存款金额字符串转成整形后保存

        returndep_amount#返回存款金额

        获取用户存款成功标志例子:

        if″CASHINNOTESOK″inline:

#如果成功取款标志在本行中

        dep_ok_amount+=dep_amount#累加存款金额

        dep_ok_num+=1#累加存款笔数

        cash_stored=True#只要条件匹配一次,就将存钞标志置真

        succeed_trans+=(date.strip()+″″+card.strip()+″″+str(dep_amount)+″depsucceed\\n″)

        #保存成功交易明细

        获取管理员清机加钞标志:

        if′---RefillCash---′inline:

#获取加钞标志

        Heredowhatyouwant

        程序运行示例:

图2是打开了多个流水记录文件后程序的运行显示效果图。

        上左:

疑问交易明细上右:

疑问交易概览

        下左:

各周期交易汇总下右:

硬件关键信息

        图2运行显示效果图

        4结语

        本文所述的基于Python语言的流水分析工具在分析自助设备运行状况中得到了很好的应用,大大减少了

        设备维护者的工作量。

在一个交易周期还未结束时,就可提前发现已经出现的疑问帐务,对于由于网络问题而导致服务器记录缺失现象有很大帮助,同时也提高了对客户的服务水平。

基于此方法,还可以用Python语言编写分析工具来分析其他领域的记录文件。

        参考文献

        [1]MarkLutz.LearningPython[M].3版.南京:

东南大学出版社,2008.

        [2][美]WesleyJChun.Python核心编程[M].2版.宋吉广,译.北京:

人民邮电出版社,2007.

        [3]孙广磊.征服Python——语言基础与典型应用[M].北京:

人民邮电出版社,2007.

        [4]NOELRAPPIN.wxPythoninAction[M].ManningPublicationsCo.,2006.

        [5]AlexMartelli.PythoninaNutshell[M].2ndEdition.O′Reilly,2006.

        [6]MagnusLieHetland.BeginningPythonFromNovicetoProfessional[M].SecondEdition.2008.

        [7]TarekZiadé.ExpertPythonProgramming[M].PacktPublishingLtd.2008.

        [8]JimKnowlton.Python?

:

Create-Modify-Reuse[M].WileyPublishingInc..2008.

        [9]MarkLutz.ProgrammingPython[M].3rdEdition.O′Reilly,2006.

        [10]DavidMertz.TextProcessinginPython[M].AddisonWesley,2003.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1