python实现批量获取指定文件夹下的所有文件的厂商信息
admin
2023-07-31 02:13:22
0

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

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
python绘图库Matplo... 本文简单介绍了Python绘图库Matplotlib的安装,简介如下: matplotlib是pyt...
Prometheus+Graf... 一,Prometheus概述 1,什么是Prometheus?Prometheus是最初在Sound...