记一次python文本处理实例

前几天在使用VS2010建立项目向导时,一直报脚本错误,当时点了否并没有在意。



今天有时间闲下来看了下出错的那个htm文件,才发现文件的末尾被追加了VBS脚本,然后检查下了下其他的htm文件,悲剧的发现所有.htm和.html文件都被追加了相同的内容(everything搜索下了.html文件有6k多个 =。=)



从被追加的内容上看,应该是生成一个"svchost.exe"文件,这个exe似乎并不能执行 =。=.. 不是太懂VBS的语法...现在的问题是怎么去掉这6k多个.html文件里被追加的内容。。

本来是准备写个C程序简单处理下,但想想过程有点繁琐,放弃了。刚好这段时间在看python,感觉python在文本处理方面较C而言方便很多,于是动手写了第一个真正意义上的python脚本。。


第一步:查找磁盘中所有的.htm和.html文件

利用walk函数来遍历磁盘文件,提取扩展名,过滤得到.htm和.html文件

def findHtml(path):
   for root, dirs, files in os.walk(path,topdown=False):
    for name in files:
        filetype = os.path.splitext(name)[-1];
        if filetype == ".html" or filetype == ".htm":
            fullpath = os.path.join(root,name)
            print(fullpath)
            #killVirus(fullpath)


第二步:处理文件,去掉被追加的部分

开始考虑到用HTMLParse来处理html文本,写了几个Demo后发现并不是特别的适合。考虑到追加的内容都在文件末尾且有着特殊的标签 <SCRIPT Language=VBScript> .. </SCRIPT>,于是暴力读取文件的每一行,匹配到<SCRIPT Language=VBScript>就丢弃剩下的内容,保存之前的内容到新文件。


def killVirus(filePath):
    fIn = file(filePath,"r")
    allIn = fIn.readlines()
    allOut = []
    for eachline in allIn:
        indexs = eachline.find("<SCRIPT Language=VBScript>")
        if indexs != -1:
            allOut.append(eachline[:indexs])
            break
        else:
            allOut.append(eachline)
    fIn.close()
    try:
        fOut = file(filePath,"w")
        fOut.writelines(allOut)
        fOut.close()
    except Exception, e:
        print e
    finally:
        pass


有了上诉两个函数就可以对每一个磁盘进行遍历处理了,效率还是非常高的,整个过程大概不到一分钟就完整了。第一次写python脚本,风格什么的也都是很乱 =。=


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值