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