欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-16 14:26:52
本文实例讲述了python实现批量获取指定文件夹下的所有文件的厂商信息的方法。分享给大家供大家参考。具体如下: 功能代码如下: import os, strin...

本文实例讲述了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程序设计有所帮助。