多图片文件夹文本提取至CSV异常:仅保留最后一行,需每行对应单图
问题原因
你代码里每次循环都用open("datarecords.csv", 'w')打开文件,'w'模式会清空文件原有内容再写入,所以最后只会保留最后一张图片的提取结果。另外你还漏导入了csv模块,运行时会触发NameError。
修复后的代码
from PIL import Image from pytesseract import pytesseract import os import csv # 补全缺失的csv模块 # 定义tesseract路径 path_to_tesseract = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 定义图片文件夹路径 path_to_images = r'all_img_iteration_demo/' # 指定tesseract命令路径 pytesseract.tesseract_cmd = path_to_tesseract # 提前打开CSV文件,仅初始化一次 with open("datarecords.csv", 'w', newline='', encoding='utf-8') as csvfile: csvwriter = csv.writer(csvfile) # 遍历文件夹下所有文件 for root, dirs, file_names in os.walk(path_to_images): for file_name in file_names: # 用os.path.join安全拼接路径,避免斜杠问题 img_path = os.path.join(root, file_name) # 打开图片 img = Image.open(img_path) # 提取图片文本 text = pytesseract.image_to_string(img) list_1 = text.split() print(list_1) # 写入当前图片的提取结果到CSV的一行 csvwriter.writerow(list_1)
关键修改说明
- 补导入
csv模块,解决csv.writer未定义的错误 - 将文件打开操作移到循环外部,只用
'w'模式初始化一次文件,循环内仅执行写入操作,避免覆盖之前的内容 - 用
os.path.join拼接图片路径,避免手动拼接时因路径末尾无斜杠导致的错误 - 添加
newline=''和encoding='utf-8',解决CSV文件自动添加空行和中文乱码问题
内容的提问来源于stack exchange,提问作者Gaurav Tiwari
相关产品推荐
相关产品推荐

