python提取图片数据写入excel,并打包为exe可执行文件
- 1. 以下面的图片为例
- 2. python环境需要的依赖包
- 3. 创建交互式窗口
- 4. 读取文件夹下的所有文件并提取数据
- 5. 提取图片中字段的代码
- 6. 打包代码为exe可执行文件
- 安装打包依赖文件
- 运行打包代码
1. 以下面的图片为例
2. python环境需要的依赖包
import os
import re
import pytesseract
from tkinter import Tk, filedialog
from PIL import Image, ImageOps
import pandas as pd
3. 创建交互式窗口
# 创建Tkinter窗口
root = Tk()
root.withdraw() # 隐藏主窗口# 弹出选择文件夹对话框
folder_path = filedialog.askdirectory(title='选择图片文件夹')
4. 读取文件夹下的所有文件并提取数据
# 弹出选择文件夹对话框
folder_path = filedialog.askdirectory(title='选择图片文件夹')
# 配置Tesseract路径,如果已配置环境变量则可以省略这步
pytesseract.pytesseract.tesseract_cmd = r'D:\toolsoft\tesseractocr\tesseract.exe'
# 创建一个字典来存储数据
data = {'file name': [],'CBF<30% volume': [],'Tmax>6.0s volume': [],'Mismatch volume': [],'Mismatch ratio': []
}
# 如果用户取消选择,返回空路径
if not folder_path:print('未选择文件夹。')
else:print(f'选择的文件夹路径为:{folder_path}')# 遍历文件夹中的所有文件for filename in os.listdir(folder_path):file_path = os.path.join(folder_path, filename)if os.path.isfile(file_path):# 检查文件是否为图片文件(可以根据实际需求扩展这个条件)if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):# 打开图片try:image = Image.open(file_path)# 处理图片,例如显示、保存或进行其他操作data = from_fig_get_txt(data, image)data['file name'].append(f"{filename}")# 例如,显示图片# image.show()# 或者进行其他处理,如图像处理、识别等# 这里可以添加你的其他代码逻辑except OSError:print(f'无法打开文件:{file_path}')# 使用pandas将数据写入Exceldf = pd.DataFrame(data)df.to_excel('output.xlsx', index=False)print('提取完成并已写入output.xlsx文件。')
5. 提取图片中字段的代码
def from_fig_get_txt(data, image):# 将彩色图像转换为灰度图像gray_image = ImageOps.grayscale(image)# 使用pytesseract提取图片中的文字text = pytesseract.image_to_string(gray_image, lang='eng') # chi_sim使用简体中文,'eng'用于英文# 将提取的文字按要求分割或处理lines = text.split('\n')for i, line in enumerate(lines):if 'CBF<30% volume' in line.strip(): # 跳过空行# 使用正则表达式进行匹配# 匹配CBF后面的数据cbf_match = re.search(r'CBF<(\d+%) volume:\s*(\S+)\s*ml', line)if cbf_match:# cbf_percent = cbf_match.group(1) # 提取CBF的百分比cbf_volume = cbf_match.group(2) # 提取CBF的体积# print(f"CBF百分比: {cbf_percent}, CBF体积: {cbf_volume} ml")data['CBF<30% volume'].append(f"{cbf_volume} ml")if 'Tmax>6.0s volume' in line.strip(): # 跳过空行# 匹配Tmax后面的数据tmax_match = re.search(r'Tmax>([\d.]+)s.*?volume:\s*([\d.]+)\s*ml', line)if tmax_match:# tmax_value = tmax_match.group(1) # 提取Tmax的数值tmax_volume = tmax_match.group(2) # 提取Tmax的体积# print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")data['Tmax>6.0s volume'].append(f"{tmax_volume} ml")if 'Mismatch volume' in line.strip(): # 跳过空行# 匹配Mismatch后面的数据Mis_match = re.search(r':\s*(.*)$', line)Mis_volume = Mis_match.group(1) # 提取Tmax的体积# print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")data['Mismatch volume'].append(f"{Mis_volume}")if 'Mismatch ratio' in line.strip(): # 跳过空行# 匹配Mismatch后面的数据Mis_ratio = re.search(r':\s*(.*)$', line)Mis_ratio = Mis_ratio.group(1) # 提取Tmax的体积# print(f"Tmax数值: {tmax_value} s, Tmax体积: {tmax_volume} ml")data['Mismatch ratio'].append(f"{Mis_ratio}")return data
6. 打包代码为exe可执行文件
安装打包依赖文件
pip install pyinstaller
运行打包代码
pyinstaller --onefile yourpyfile.py
生成的 EXE 文件将在 dist 文件夹中