python_批量获取指定文件夹下的所有文件的厂商信息

上代码:

import os, string, shutil,re
import pefile
import codecs, sys
import wx
import struct
#输出中打印Unicode字符
#sys.stdout = codecs.lookup('utf-8')[-1](sys.stdout)


def addToDict(theDict,PEfile_Path,strCompanyName):
    theDict.setdefault(PEfile_Path, [ ]).append(strCompanyName)    #存在就在基础上加入列表,不存在就新建个字典key

#----------------------------------------------------------------------   
def IsPeFile(inputFileName):
    '''判断一个文件是否为PE文件'''
    file = open(inputFileName, 'r')
    dosSign = hex(struct.unpack("h",file.read(2))[0])
    if (dosSign == "0x5a4d"):
    	file.seek(0x3c)
    	date_fNew = struct.unpack("l",file.read(4))[0]
    	file.seek(date_fNew)
    	peSign = hex(struct.unpack("h",file.read(2))[0])
    	if (peSign == "0x4550"):
    		return 1
    	else:
    		return 0
    else:
    	return 0 
    

    
#得到一个文件的厂商信息
#输入:文件路径
#输出:字典
def getCompanyName(PEfile_Path):
    if not IsPeFile(PEfile_Path):
	return {}
    else:
	dictCompany = {}
	pe = pefile.PE(PEfile_Path)  
	p = re.compile('''CompanyName:(.+)''')
	for name in p.findall(pe.__str__()):
	    uniCompanyName = name.replace('\\x', '\\u').strip()
	    #strTemp = uniCompanyName.decode('unicode_escape')
	    addToDict(dictCompany, PEfile_Path, uniCompanyName)
	    
    writeDicToFile(dictCompany) #写入文件
    return dictCompany


#得到文件夹中所有文件的厂商信息
#输入:文件夹路径
#输出:字典
def getCompanyNameFromDir(dir, dir_callback=None, file_callback=None):
    dictAll = {}
    for root, dirs, files in os.walk(dir):
        for f in files:
            file_path = os.path.join(root, f)
            if file_callback: file_callback(file_path)
            dictAll.update(getCompanyName(file_path))
            
    return dictAll

#----------------------------------------------------------------------
def  writeDicToFile(dicName, outputFileName="company.txt"):
    """将字典写入文件中"""
    fileOutput = open(outputFileName, "a+")
    for key, value in dicName.items():
        strTemp2 = '' + value[0]
        strChina2 = strTemp2.decode('unicode_escape')
	
	try:
	    fileOutput.write("%-*s" % (110, key))
	    fileOutput.write(strChina2.encode('gb2312'))
	except UnicodeEncodeError, e:
	    pass
        fileOutput.write("\n")
    
    fileOutput.close()
    
    
#----------------------------------------------------------------------------------
#主函数
if __name__ == "__main__":
    getCompanyNameFromDir(u"D:\\everydaySample\\1221\\10white")
    print  "ok finish"


不解释,代码很简单..

出现的问题:

1. 写入中文.str.encode('gb2212')解决

2. 出现

UnicodeEncodeError
错误,用了try给忽略了 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值