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

945次阅读  |  发布于5年以前

本文实例讲述了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给忽略了

希望本文所述对大家的Python程序设计有所帮助。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8