for
loops don't really work like that. Their syntax is for <variable> in <iterable>
.
Just us an if
statement instead:
if depth <= 0:
return
for item in os.listdir(pathname):
Question
so I'm writing code that takes a pathname
, a signature
, and the third parameter is a number
that represents the depth of subdirectories that should be scanned.
So lets say I have a file: test:
In it is test1 folder,test2 folder,antivirus.py,simple.py
In test1 folder is antivirus1.py
In test2 folder is test3 folder, and antivirus2.py
In test3 folder is antivirus3.py
So this is how it should work:
>>>scan('test',rules, 0)
test\antivirus.py, found virus Virus2
test\antivirus.py, found virus Virus1
>>>
>>>scan('test',rules, 2)
test\antivirus.py, found virus Virus2
test\antivirus.py, found virus Virus1
test\test1\antivirus1.py, found virus Virus2
test\test1\antivirus1.py, found virus Virus1
test\test2\antivirus2.py, found virus Virus2
test\test2\antivirus2.py, found virus Virus1
Here is my current code:
def scan(pathname, signatures, depth):
for item in os.listdir(pathname) and depth > 0:
n = os.path.join(pathname, item)
try:
scan(n, signatures, depth-1)
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()
Solution
for
loops don't really work like that. Their syntax is for <variable> in <iterable>
.
Just us an if
statement instead:
if depth <= 0:
return
for item in os.listdir(pathname):