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