2

わかりました、私は完全に困惑しています。私は一晩中これに取り組んできましたが、うまくいきません。私にはファイルを調べる権限があります。私がやりたいのは、くそったれなものを読むことだけです。私が試みるたびに、私は得る:

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    scan('test', rules, 0)
  File "C:\Python32\PythonStuff\csc242hw7\csc242hw7.py", line 45, in scan
    files = open(n, 'r')
IOError: [Errno 13] Permission denied: 'test\\test'

これが私のコードです。未完成ですが、少なくともテストしているセクションの正しい値を取得する必要があると感じています。基本的に、私はフォルダを調べたいと思っています。ファイルがある場合は、設定したものを探してスキャンしますsignatures。フォルダがある場合は、depth指定に応じてスキャンするかスキャンしません。がある場合は、depth < 0それが返されます。その場合depth == 0、最初のフォルダー内の要素をスキャンするだけです。depth > 0指定された深さまでフォルダをスキャンする場合。なんらかの理由でファイルを読み取る権限がないため、それは問題ではありません。何が間違っているのかわかりません。

def scan(pathname, signatures, depth):
'''Recusively scans all the files contained in the folder pathname up
until the specificed depth'''
    # Reconstruct this!
    if depth < 0:
        return
    elif depth == 0:
        for item in os.listdir(pathname):
            n = os.path.join(pathname, item)
            try:
                # List a directory on n
                scan(n, signatures, depth)
            except:
                # Do what you should for a file
                files = open(n, 'r')
                text = file.read()
                for virus in signatures:
                    if text.find(signatures[virus]) > 0:
                        print('{}, found virus {}'.format(n, virus))
                files.close()

ちょっとした編集:

以下のコードは非常によく似た処理を行いますが、深さを制御できません。ただし、正常に動作します。

def oldscan(pathname, signatures):
    '''recursively scans all files contained, directly or
       indirectly, in the folder pathname'''
    for item in os.listdir(pathname):
        n = os.path.join(pathname, item)
        try:
            oldscan(n, signatures)
        except:
            f = open(n, 'r')
            s = f.read()
            for virus in signatures:
                if s.find(signatures[virus]) > 0:
                    print('{}, found virus {}'.format(n,virus))
            f.close()
4

1 に答える 1

1

test\test私はそれがディレクトリであると推測してみましたが、いくつかの例外が発生しました。やみくもに例外をキャッチし、ディレクトリをファイルとして開こうとします。これにより、Windows で Errno 13 が発生します。

os.path.isdirtry...except の代わりに、ファイルとディレクトリを区別するために使用します。

    for item in os.listdir(pathname):
        n = os.path.join(pathname, item)
        if os.path.isdir(n):
            # List a directory on n
            scan(n, signatures, depth)
        else:
            # Do what you should for a file
于 2012-11-06T07:40:40.233 に答える