permissionerror permission open python recursion ioerror

python - open - permissionerror errno 13 permission denied



Python IOError: Errno 13 Permiso denegado (1)

Me atrevo a adivinar que test/test es un directorio y se produjo alguna excepción. Capturas la excepción a ciegas e intentas abrir el directorio como un archivo. Eso le da a Errno 13 en Windows.

Utilice os.path.isdir para distinguir entre archivos y directorios, en lugar de intentar ... excepto.

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

Ok, estoy totalmente desconcertado. He estado trabajando en esto toda la noche y no puedo hacer que funcione. Tengo permiso para mirar el archivo, todo lo que quiero hacer es leer lo maldito. Cada vez que lo intento, obtengo:

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''

Aquí está mi código. No está terminado, pero creo que al menos debería obtener los valores correctos para las secciones que estoy probando. Básicamente, quiero buscar en una carpeta, y si hay un análisis de archivos, busco lo que establezca mis signatures . Si hay carpetas, las escanearé o no, dependiendo de la depth especificada. Si hay una depth < 0 entonces volverá. Si depth == 0 , simplemente escaneará los elementos en la primera carpeta. Si depth > 0 explorará las carpetas hasta la profundidad especificada. Nada de eso importa, porque por alguna razón no tengo permiso para leer el archivo. No tengo idea de lo que estoy haciendo mal.

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()

Solo una edición rápida:

Este código a continuación hace algo muy similar, pero no puedo controlar la profundidad. Sin embargo, funciona bien.

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()