python实现批量获取指定文件夹下的所有文件的厂商信息
本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法。分享给大家供大家参考。具体如下:
功能代码如下:
importos,string,shutil,re
importpefile
importcodecs,sys
importwx
importstruct
#输出中打印Unicode字符
#sys.stdout=codecs.lookup('utf-8')[-1](sys.stdout)
defaddToDict(theDict,PEfile_Path,strCompanyName):
theDict.setdefault(PEfile_Path,[]).append(strCompanyName)
#存在就在基础上加入列表,不存在就新建个字典key
defIsPeFile(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"):
return1
else:
return0
else:
return0
#得到一个文件的厂商信息
#输入:文件路径
#输出:字典
defgetCompanyName(PEfile_Path):
ifnotIsPeFile(PEfile_Path):
return{}
else:
dictCompany={}
pe=pefile.PE(PEfile_Path)
p=re.compile('''''CompanyName:(.+)''')
fornameinp.findall(pe.__str__()):
uniCompanyName=name.replace('\\x','\\u').strip()
#strTemp=uniCompanyName.decode('unicode_escape')
addToDict(dictCompany,PEfile_Path,uniCompanyName)
writeDicToFile(dictCompany)#写入文件
returndictCompany
#得到文件夹中所有文件的厂商信息
#输入:文件夹路径
#输出:字典
defgetCompanyNameFromDir(dir,dir_callback=None,file_callback=None):
dictAll={}
forroot,dirs,filesinos.walk(dir):
forfinfiles:
file_path=os.path.join(root,f)
iffile_callback:file_callback(file_path)
dictAll.update(getCompanyName(file_path))
returndictAll
defwriteDicToFile(dicName,outputFileName="company.txt"):
"""将字典写入文件中"""
fileOutput=open(outputFileName,"a+")
forkey,valueindicName.items():
strTemp2=''+value[0]
strChina2=strTemp2.decode('unicode_escape')
try:
fileOutput.write("%-*s"%(110,key))
fileOutput.write(strChina2.encode('gb2312'))
exceptUnicodeEncodeError,e:
pass
fileOutput.write("\n")
fileOutput.close()
#主函数
if__name__=="__main__":
getCompanyNameFromDir(u"D:\\everydaySample\\1221\\10white")
print"okfinish"
这里不解释,代码很简单.
出现的问题如下:
1.写入中文.str.encode('gb2212')解决
2.出现UnicodeEncodeError的错误,用了try给忽略了
希望本文所述对大家的Python程序设计有所帮助。