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程序设计有所帮助。