python实现批量获取指定文件夹下的所有文件的厂商信息
程序员文章站
2022-06-21 07:53:21
本文实例讲述了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程序设计有所帮助。
上一篇: python实现得到一个给定类的虚函数