Python Error pytesseract: PermissionError: [WinError 5] Access is denied

本文介绍了一个使用Python的OCR(光学字符识别)过程中遇到的权限错误问题,并给出了具体的解决方案。通过调整Tesseract-OCR的路径设置,成功解决了[WinError5]Accessisdenied的报错。

from PIL import Image
import pytesseract
pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files (x86)\\Tesseract-OCR\\tessdata"
image = Image.open(r"E:\Python\ocr\venv\111.png")
code = pytesseract.image_to_string(image)
print(code)

E:\Python\ocr\venv\Scripts\python.exe E:/Python/ocr/ocr.py
Traceback (most recent call last):
  File "E:/Python/ocr/ocr.py", line 7, in <module>
    code = pytesseract.image_to_string(image)
  File "E:\Python\ocr\venv\lib\site-packages\pytesseract\pytesseract.py", line 136, in image_to_string
    nice=nice)
  File "E:\Python\ocr\venv\lib\site-packages\pytesseract\pytesseract.py", line 82, in run_tesseract
    proc = subprocess.Popen(command, stderr=subprocess.PIPE)
  File "C:\Program Files\Python36\Lib\subprocess.py", line 707, in __init__
    restore_signals, start_new_session)
  File "C:\Program Files\Python36\Lib\subprocess.py", line 992, in _execute_child
    startupinfo)
PermissionError: [WinError 5] Access is denied

一段简单的读取图片code,一开始包FileNotFoundError,于是添加tesseract_cmd路径,出现 [WinError 5] Access is denied

将tesseract_cmd更改为以下,问题解决

pytesseract.pytesseract.tesseract_cmd = "C:\\Program Files (x86)\\Tesseract-OCR\\tesseract.exe"

<think> 我们正在处理一个权限拒绝的错误,该错误发生在Python处理PDF文件时,具体是无法删除某个目录下的文件(或目录)。错误信息指出路径是'D:/work/QMCS/333/'。我们需要解决这个权限问题。 常见的权限问题原因及解决方法: 1. 文件或目录被其他程序占用:可能是该文件正在被其他程序(如PDF阅读器)打开,导致无法删除。解决方法:关闭占用该文件的所有程序,再重试。 2. 程序没有足够的权限:可能Python脚本运行时没有足够的权限删除该文件。解决方法: - 以管理员身份运行程序(但在Linux/Unix系统中,我们通常使用sudo,而在Windows中,可以右键点击程序选择“以管理员身份运行”)。 - 检查文件/目录的权限设置,确保运行脚本的用户具有写入和删除权限。 3. 路径指向的是目录而非文件:错误信息中给出的路径是'D:/work/QMCS/333/',看起来是一个目录。如果尝试用删除文件的方法删除目录,会导致错误。应该使用删除目录的方法(如shutil.rmtree)并确保目录为空或者递归删除。 4. 路径错误:检查路径是否正确,可能路径不存在或者拼写错误。 5. 防病毒软件或安全软件的干扰:有时安全软件会锁定文件,导致无法删除。可以暂时禁用安全软件再试(需谨慎)。 根据错误信息,我们注意到路径末尾有一个斜杠,表明这是一个目录。因此,问题可能出在尝试删除一个目录,但权限不足或者目录非空。 步骤建议: 1. 确认该目录是否存在,以及该目录是否被其他程序占用(如资源管理器打开在该目录)。 2. 检查Python脚本中删除操作的代码,确认是否使用了正确的方法删除目录。删除目录应使用`shutil.rmtree`,而不是`os.remove`(用于删除文件)。 3. 确保运行脚本的用户具有该目录的完全控制权限(在Windows上,可以右键目录->属性->安全,检查用户权限)。 4. 如果目录不存在,则可能是程序在尝试删除一个已经不存在的目录,需要检查代码逻辑。 如果代码中使用`os.remove`来删除目录,就会引发错误,因为`os.remove`只能删除文件。正确删除目录的方法: ```python import shutil shutil.rmtree('D:/work/QMCS/333/') # 注意:这会递归删除整个目录,包括里面的所有文件和子目录 ``` 如果只想删除空目录,可以使用: ```python import os os.rmdir('D:/work/QMCS/333/') # 只能删除空目录 ``` 因此,请检查代码中删除操作的实现。 另外,考虑到错误信息中提到的“cannot remove file”,但实际上路径是目录,所以很可能是代码中错误地将目录当作文件删除了。 如果以上方法不能解决,可以尝试在删除之前修改文件属性(例如,如果文件被设置为只读,则去除只读属性): ```python import os, stat def remove_readonly(func, path, _): "清除只读属性并重试" os.chmod(path, stat.S_IWRITE) func(path) shutil.rmtree('D:/work/QMCS/333/', onerror=remove_readonly) ``` 总结步骤: 1. 检查路径是文件还是目录,并确认路径正确。 2. 确保没有其他程序占用该文件/目录。 3. 检查代码中删除操作是否正确(使用正确的函数)。 4. 检查权限,必要时修改权限或使用管理员权限运行。 5. 使用错误处理(如`shutil.rmtree`的`onerror`参数)来克服权限问题。 根据引用[3]中提到的安装依赖,虽然与当前问题没有直接关系,但可以提醒用户注意环境问题。不过当前问题主要是权限和操作方式问题。 注意:在Windows系统中,路径使用反斜杠`\`,但在Python字符串中通常使用原始字符串或双反斜杠,或者使用正斜杠(Python支持)。错误信息中使用的是正斜杠,这没有问题。 请用户根据上述步骤尝试解决。 </think> ### 解决Python处理PDF时权限被拒绝的问题 您遇到的 `Permission denied` 错误通常是由于文件被占用或权限不足造成的。以下是完整解决方案: #### 1. **检查文件占用状态(主要解决方案)** ```python import psutil import os def unlock_file(file_path): for proc in psutil.process_iter(): try: files = proc.open_files() for f in files: if f.path == os.path.abspath(file_path): print(f"文件被 {proc.name()} (PID: {proc.pid}) 占用") proc.terminate() # 终止占用进程 except (psutil.NoSuchProcess, psutil.AccessDenied): continue ``` 使用示例: ```python unlock_file('D:/work/QMCS/333/yourfile.pdf') # 替换为实际文件路径 ``` **说明**:此代码会检测并解除任何程序对该文件的占用(包括资源管理器预览、PDF阅读器等)。在实际应用中需添加异常处理[^1]。 #### 2. **修改文件权限** 在终端执行(Windows): ```powershell # 获取文件所有权 takeown /f "D:\work\QMCS\333\" /r /d y # 授予完全控制权 icacls "D:\work\QMCS\333\" /grant Everyone:(F) /t ``` #### 3. **关闭文件资源管理器** 错误路径 `D:/work/QMCS/333/` 显示可能是**目录**权限问题: ```python import shutil try: shutil.rmtree('D:/work/QMCS/333/', ignore_errors=False) except PermissionError as e: print(f"仍有进程占用目录: {e.filename}") # 返回步骤1检测占用进程 ``` #### 4. **防病毒软件白名单** 将以下路径加入防病毒软件排除列表: ``` D:\work\QMCS\333\ D:\your_python_project_path\ ``` 常见软件锁定行为:卡巴斯基、Windows Defender实时保护[^2]。 #### 5. **代码层解决方案(推荐)** ```python import os import time import errno def safe_remove(path, max_retries=5, delay=1): """安全删除文件/目录,自动重试""" for _ in range(max_retries): try: if os.path.isfile(path): os.remove(path) elif os.path.isdir(path): shutil.rmtree(path) return True except PermissionError as e: if e.winerror == 32: # Windows文件占用错误码 time.sleep(delay) else: raise return False ``` ### 操作步骤总结: 1. 运行文件占用检测代码定位锁定进程 2. 手动关闭相关程序(或自动终止进程) 3. 使用 `safe_remove()` 函数处理文件 4. 仍失败则通过命令修改权限 5. 检查防病毒软件设置 > 根据引用[2][3]的经验,文件系统权限问题常由大小写敏感(如`-o3`与`-O3`)或依赖缺失引起,但本例核心是**文件资源冲突**。建议优先排查资源管理器和后台进程[^1][^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值