Python RarFile/[WinError 5]:访问被拒绝

Python RarFile/[WinError 5]:访问被拒绝,python,windows,extract,zipfile,rar,Python,Windows,Extract,Zipfile,Rar,我正在尝试编写一个脚本,它将自动从rar或zip文件夹中提取文件,并将它们放在某个地方,以便更快地组织文件。其中包括规范的相关章节: import shutil import os import eyed3 import glob import zipfile import rarfile import unrar import patoolib ## create zipfile object of the downloaded album and get a tracklist rarf

我正在尝试编写一个脚本,它将自动从rar或zip文件夹中提取文件,并将它们放在某个地方,以便更快地组织文件。其中包括规范的相关章节:

import shutil
import os
import eyed3
import glob
import zipfile
import rarfile
import unrar
import patoolib

## create zipfile object of the downloaded album and get a tracklist

rarfile.UNRAR_TOOL=r'C:\Users\John\AppData\Local\Programs\Python\Python36-32'

downloads = glob.glob("C:\\Users\\John\\Downloads\\*")
music_zip = max(downloads, key=os.path.getctime)
if os.path.splitext(music_zip)[-1] == '.zip':
    music_folder = zipfile.ZipFile(music_zip)
elif os.path.splitext(music_zip)[-1] == '.rar':
    music_folder = rarfile.RarFile(music_zip)

print(music_zip)
print(music_folder)
temporary_album_folder = 'C:\\Users\\John\\Downloads\\temporary_album_folder'
if not os.path.exists(temporary_album_folder):
    os.makedirs(temporary_album_folder)

# patoolib.extract_archive(music_zip, outdir=temporary_album_folder)
# temp_list = os.listdir(temporary_album_folder)
# tag = eyeD3.load(temp_list[0])
# artist = tag.getArtist()
# album = tag.getAlbum()

# print(os.getcwd())

os.chdir(temporary_album_folder)
music_folder.extractall()
music_folder.close()
print(temporary_album_folder)
当我运行这个程序时,我希望它能成功地将RAR的内容提取到\Downloads中的一个临时文件夹中。相反,当我尝试在控制台中运行此操作时,收到的错误消息是:

C:\Users\John\Documents\PythonScripts>music_organizer.py
C:\Users\John\Downloads\d1ctus t3 n3c4r3(5).rar
<rarfile.RarFile object at 0x02C16350>
Traceback (most recent call last):
  File "C:\Users\John\Documents\PythonScripts\music_organizer.py", line 40, in <
module>
    music_folder.extractall()
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site-package
s\rarfile.py", line 820, in extractall
    self._extract(fnlist, path, pwd)
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site-package
s\rarfile.py", line 885, in _extract
    p = custom_popen(cmd)
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site-package
s\rarfile.py", line 2813, in custom_popen
    creationflags=creationflags)
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\subprocess.p
y", line 707, in __init__
    restore_signals, start_new_session)
  File "C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\subprocess.p
y", line 990, in _execute_child
    startupinfo)
PermissionError: [WinError 5] Access is denied
C:\Users\John\Documents\PythonScripts>music\u-organizer.py
C:\Users\John\Downloads\d1ctus t3 n3c4r3(5).rar
回溯(最近一次呼叫最后一次):
文件“C:\Users\John\Documents\PythonScripts\music\u organizer.py”,第40行,在<
模块>
music_文件夹.extractall()
文件“C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site包
s\rarfile.py”,第820行,在extractall中
自我提取(fnlist、路径、pwd)
文件“C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site包
s\rarfile.py”,第885行,摘自
p=定制的popen(cmd)
文件“C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\site包
s\rarfile.py”,第2813行,自定义字体
creationflags=creationflags)
文件“C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\subprocess.p
y“,第707行,初始__
恢复信号,启动新会话)
文件“C:\Users\John\AppData\Local\Programs\Python\Python36-32\lib\subprocess.p
y“,第990行,在子对象中
startupinfo)
PermissionError:[WinError 5]访问被拒绝
我知道很多其他人对WinError 5和Python提出了类似的问题,因此要提前解决可能的常见建议:我正在以管理模式运行终端,已关闭UAC,已解除对相关文件夹的阻止,并已打开对相关文件夹和子文件夹的完全权限。有人知道为什么会发生这种情况,以及可能的解决办法吗?非常感谢您的帮助。

请参阅:埃里克森的评论
这不是安全许可问题。UNRR_工具应该是UNRR程序的可执行文件名(可选完整路径)。subprocess.Popen失败,因为您正在尝试执行“Python36-32”目录埃里克森昨天


Windows API有一些相当无用的错误代码映射。在NT API内部,这种情况下的错误是STATUS_FILE_is_A_DIRECTORY(0xC00000BA),这一点再明显不过了,但它被映射到Windows拒绝的错误访问(0x0005),这会误导您认为这是文件或对象权限的问题昨日的埃里克森

参考:埃里克森的评论
这不是安全许可问题。UNRR_工具应该是UNRR程序的可执行文件名(可选完整路径)。subprocess.Popen失败,因为您正在尝试执行“Python36-32”目录埃里克森昨天


Windows API有一些相当无用的错误代码映射。在NT API内部,这种情况下的错误是STATUS_FILE_is_A_DIRECTORY(0xC00000BA),这一点再明显不过了,但它被映射到Windows拒绝的错误访问(0x0005),这会误导您认为这是文件或对象权限的问题eryksun昨天

这不是安全许可问题<代码>UNRR_工具应该是UNRR程序的可执行文件名(可选完整路径)
subprocess.Popen
失败,因为您试图执行“Python36-32”目录。我是个白痴!多谢!Windows API有一些相当无用的错误代码映射。在NT API内部,这种情况下的错误是
状态文件\u是\u A\u目录
(0xC00000BA),这一点再明显不过了,但它被Windows映射到
错误访问被拒绝
(0x0005),这会误导您认为这是文件或对象权限的问题。@eryksun将所有信息添加到答案中。这不是安全权限问题<代码>UNRR_工具应该是UNRR程序的可执行文件名(可选完整路径)
subprocess.Popen
失败,因为您试图执行“Python36-32”目录。我是个白痴!多谢!Windows API有一些相当无用的错误代码映射。在NT API内部,这种情况下的错误是
状态文件是\u A\u目录
(0xC00000BA),这一点再明显不过了,但它被Windows映射到
错误访问被拒绝
(0x0005),这会误导您认为这是文件或对象权限的问题。@eryksun将所有信息添加到答案中。