使用 class 定义扫描计算机系统文件

Scan computer system file using class definition

我是 python 的新手,很少使用 class 定义,我尝试 运行 我的程序但出现错误...有人知道发生了什么事吗?或者我的代码有问题?我已经尝试了2天... 这是下面的编码:

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):
        viruslist = open('C:/FYP/SecuCOM2022/virusshare.md5.txt','rt')
        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:
            print(filename, self.md5(filename))
            if self.md5(filename) in virusinside:
                print(virus)
                os.remove(filename)
            else:
                print(novirus)
        

    filenames=get_all_abs_paths('C:/Users/User/Desktop/irustesting')

出现以下错误:-

class QuickScan:
  File "c:\FYP\SecuCOM2022\QuickScanTab.py", line 71, in QuickScan

filenames=get_all_abs_paths('C:/Users/User/Desktop/irustesting')
TypeError: get_all_abs_paths() missing 1 required positional argument: 'rootdir'  

get_all_abs_paths() 是 class QuickScan 的实例属性(方法)。您需要实例化 class QuickScan 的对象并调用其 get_all_abs_paths()

scan = QuickScan()
scan.get_all_abs_paths('C:/Users/User/Desktop/irustesting')

此外,请注意此方法没有明确的 return,因此它有 return None 以及您将 return 值绑定到名称 filenames 没有多大意义。

此外,您需要取消缩进一层,目前 filenames=get_all_abs_paths('C:/Users/User/Desktop/irustesting') 在 class.