Python调用pytesseract批量提取图片文本报FileNotFoundError求助
问题根因
当前报错是路径拼接错误直接触发的,另外代码中还有两处隐藏逻辑问题会导致功能不符合预期:
- 直接用字符串拼接文件夹路径和文件名时,你定义的
path_to_images末尾没有带路径分隔符\,最终生成的路径变成了C:\Users\vIBRancy\Desktop\quantic_trust _file\imagesIMG_0096.jpeg,文件夹名images和文件名直接连在了一起,系统找不到对应文件就抛出了FileNotFoundError。 - 写入识别结果时使用了
'w'模式打开文件,每次循环都会清空文件原有内容,最终输出文件只会保留最后一张图片的识别结果,无法实现多图文本汇总的需求。 - 调用
os.walk遍历目录时没有使用返回的root参数拼接路径,一旦images文件夹下存在子目录,子目录内的文件路径会拼接错误。
修复方案
不要手动用字符串拼接路径,使用Python标准库os.path.join()方法处理路径拼接,该方法会自动适配不同操作系统的路径分隔符,不需要手动处理斜杠问题;同时调整文件写入逻辑、增加非图片文件过滤,避免后续触发其他异常。
修复后的可运行代码:
from PIL import Image from pytesseract import pytesseract import os # 配置tesseract程序路径 path_to_tesseract = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 配置图片存储根目录 path_to_images = r'C:\Users\vIBRancy\Desktop\quantic_trust _file\images' pytesseract.tesseract_cmd = path_to_tesseract # 支持的图片格式后缀 valid_img_suffix = ('.png', '.jpg', '.jpeg', '.bmp', '.tiff') # 循环外打开结果文件,避免每次写入覆盖之前内容,指定utf-8编码避免特殊字符写入报错 with open('quantictrustfiles.txt', 'w', encoding='utf-8') as f: for root, _, file_names in os.walk(path_to_images): for file_name in file_names: # 跳过非图片文件 if not file_name.lower().endswith(valid_img_suffix): continue # 安全拼接完整图片路径 img_path = os.path.join(root, file_name) img = Image.open(img_path) # 识别图片文本 text = pytesseract.image_to_string(img, lang='eng') # 写入结果,增加分隔符区分不同图片的内容 f.write(f"===== {file_name} 识别结果 =====\n") f.write(text + "\n\n") # 控制台打印进度 print(f"已完成{file_name}文本提取:") print(text)
修复点说明
- 路径拼接全部替换为
os.path.join(),自动处理路径分隔符,从根源避免路径拼接错误,同时兼容Windows、macOS、Linux多系统路径规则。 - 将结果文件的打开操作移到循环外层,全程仅打开一次文件,不会出现循环覆盖写入的问题;指定
encoding='utf-8'避免识别到特殊字符时触发编码报错。 - 增加图片格式校验逻辑,自动跳过目录下的非图片文件,避免PIL尝试打开非图片格式文件触发报错。
- 适配
os.walk的遍历逻辑,使用返回的root值拼接文件路径,即使图片存在子目录中也能正常识别。 - 增加图片识别结果分隔标识,后续查看结果文件时可以快速区分内容对应的源图片。
内容的提问来源于stack exchange,提问作者Ibraheem Alawode
相关产品推荐
相关产品推荐

