Python用类定义实现系统文件扫描报参数缺失错误如何解决?
错误根因
- 你将方法调用的代码写在了
QuickScan类的定义内部,属于类作用域下的代码,执行逻辑顺序错误 get_all_abs_paths是类的实例方法,第一个参数self需要绑定类的实例对象,不能直接调用未绑定实例的方法。你直接传路径参数时,Python会把这个路径识别为self参数,自然会提示缺少rootdir参数。
修复方案
修复后的完整代码如下:
import hashlib import os.path import os class QuickScan: def md5(self,fname): hash_md5 = hashlib.md5() try: with open(fname, "rb") as f: for chunk in iter(lambda: f.read(2 ** 20), b""): hash_md5.update(chunk) except Exception: pass return hash_md5.hexdigest() def get_all_abs_paths(self,rootdir): # 用with上下文管理自动关闭病毒库文件,避免资源泄漏 with open('C:/FYP/SecuCOM2022/virusshare.md5.txt','rt', encoding='utf-8') as viruslist: virusinside = [l.rstrip() for l in viruslist] paths = list() virus="detected" novirus="clear" for dirpath,_,filenames in os.walk(rootdir): for f in filenames: paths.append(os.path.abspath(os.path.join(dirpath, f))) for filename in paths: # 单个文件只计算一次MD5,减少IO开销 file_md5 = self.md5(filename) print(filename, file_md5) if file_md5 in virusinside: print(virus) os.remove(filename) else: print(novirus) # 调用代码移到类定义外部,先实例化类再调用方法 if __name__ == "__main__": scanner = QuickScan() filenames = scanner.get_all_abs_paths('C:/Users/User/Desktop/irustesting')
额外说明
新增的if __name__ == "__main__":代码块作用是避免当前脚本被其他Python文件导入时,自动执行扫描逻辑,只在直接运行当前脚本时才执行扫描。
内容的提问来源于stack exchange,提问作者Jun Jie Ong
相关产品推荐
相关产品推荐

