005、用python整理资料

2022/6/16 1:20:03

本文主要是介绍005、用python整理资料,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

005、用python整理资料 系统规划与管理师备考,常常需要整理考题、解析、答案。   一、批量识别图片文字 问题描述: 1、能识别微信截图文字。 2、能批量识别指定文件夹下的图片文字。 3、把识别出来的文字以当前日期保存到桌面上。   安装aip pip install baidu-aip 调用百度文字识别工具; baidu.py
 1 # *_* coding : UTF-8 *_*
 2 # 开发团队 :乾龙科技
 3 # 开发人员 :Administrator
 4 # 开放时间 :2021/2/17 15:31
 5 # 文件名称 :baidu.PY
 6 # 开发工具 :PyCharm
 7 # 程序代码 :
 8 # 检测键盘、截图
 9 # 检测键盘、截图
10 from aip import AipOcr
11 
12 """ 你的 APPID AK SK """
13 """注册百度文字识别后,获得下面的值"""
14 APP_ID = '*******'
15 API_KEY = '************'
16 SECRET_KEY = '*********************'
17 
18 client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
19 
20 """ 读取图片 """
21 
22 
23 def get_file_content(filePath):
24     with open(filePath, 'rb') as f:
25         return f.read()
26 
27 
28 def get_connect():
29     image = get_file_content('../../pdf/screen.png')
30 
31     """ 调用通用文字识别, 图片参数为本地图片 """
32     content = client.basicGeneral(image)
33     # print(content['words_result'])#
34     image_content = ''
35     for words in content['words_result']:
36         # print(words)
37         image_content += words['words']
38 
39     return image_content
40 
41 
42 def get_connect_mul(path):
43     image = get_file_content(path)
44 
45     """ 调用通用文字识别, 图片参数为本地图片 """
46     content = client.basicGeneral(image)
47     # print(content['words_result'])#
48     image_content = ''
49     for words in content['words_result']:
50         # print(words)
51         image_content += words['words']
52 
53     return image_content
54 
55 
56 # PDF转word
57 
58 
59 if __name__ == '__main__':
60     with open('../../doc/test.doc', 'a') as f:
61         f.write(get_connect())

 

  二、主程序:批量识别图片文字.py
  1 import tkinter as tk
  2 import tkinter.filedialog
  3 from email.header import decode_header
  4 import os
  5 import time
  6 import sys
  7 from PIL import ImageGrab
  8 from baidu import get_connect, get_connect_mul
  9 
 10 
 11 # 字符编码转换
 12 def decode_str(s):
 13     value, charset = decode_header(s)[0]
 14     if charset:
 15         value = value.decode(charset)
 16     return value
 17 
 18 
 19 # “退出”按钮,退出程序
 20 def exit_sys():
 21     sys.exit()
 22 
 23 
 24 # 选择识别的文件夹路径
 25 def select_s():
 26     # 获取选择文件夹路径
 27     foldername = tkinter.filedialog.askdirectory()
 28     # 如果选择了文件夹
 29     if foldername != '':
 30         # 删除en4中的最后一个字符
 31         # len_entry = len(en0.get())
 32         # en0.delete(len_entry - 1)
 33         # 删除en4中的所有字符
 34         en0.delete(0, tkinter.END)
 35         # 将选择的文件路径,插入到en4的第0个字符位置
 36         en0.insert(0, foldername)
 37 
 38 # 保存识别出来的文本内容为桌面文本文件
 39 def save():
 40     # 获取桌面路径
 41     path_three = os.path.join(os.path.expanduser("~"), 'Desktop')
 42     # 获取当前日期字符串
 43     time_now = time.strftime("%Y%m%d", time.localtime())
 44     # 以写方式打开以当前日期命名的文本文件,同时保存到桌面
 45     f = open(f'{path_three}/{time_now}文字识别.txt', 'w')
 46     # 读取tex_character文本框中的所有文字,
 47     # 将该字符串作为初参数交给文件对象的write方法保存到文件。
 48     # 1.0表示第一行,第一列
 49     f.write(tex_character.get(1.0, 'end'))
 50     f.close()
 51 
 52 # 识别通过微信截屏的图片文字
 53 def show_character():
 54     # 调用screen()函数,截屏并保存到专用文件
 55     screen()
 56     # 调用get_connect()函数,读取截屏图片文字并显示到tex_character文本框中
 57     tex_character.insert('end', f'{get_connect()}\n')
 58 
 59 
 60 
 61 # 识别指定文件夹下的多个图片中的文字
 62 def show_mpcharacter():
 63     # 获取指定文件路径
 64     path_one = f'{en0.get()}/'
 65     # 获取指定路径下的所有图片列表
 66     imgs = [path_one + i for i in os.listdir(path_one)]
 67     # 循环调用baidu模块的get_connect_mul()函数识别图片文字,
 68     # 同时把文字插入到tex_character文本框中
 69     for img in imgs:
 70         tex_character.insert('end', f'{get_connect_mul(img)}\n')
 71 
 72 # 截屏图片文字识别,识别单图片文字
 73 def screen():
 74     # 等待键盘事件(同时按下'ctrl+alt+a'三个键)
 75     # print('等待键盘同时按下alt+a三个键')
 76     # keyboard.wait(hotkey='alt+a')
 77     # keyboard.wait(hotkey='enter')
 78     # 图片保存在剪切板里需要时间
 79     time.sleep(2)
 80     # 读取剪切板里面的图片到image
 81     if ImageGrab.grabclipboard():
 82         image = ImageGrab.grabclipboard()
 83         # 保存图片
 84         image.save('../../pdf/screen.png')
 85         # print(image)
 86 
 87 
 88 if __name__ == '__main__':
 89     fm_main = tk.Tk()
 90     fm_main.title("批量识别图片文字V1.0")
 91     # 获取显示区域的宽度
 92     screenWidth = fm_main.winfo_screenwidth()
 93     # 获取显示区域的高度
 94     screenHeight = fm_main.winfo_screenheight()
 95     # 设置窗口宽度
 96     width = 586
 97     # 设置窗口高度
 98     height = 400
 99     left = (screenWidth - width) / 2
100     top = (screenHeight - height) / 2
101     # 宽度x高度+x偏移+y偏移
102     # 在设定宽度和高度的基础上指定窗口相对于屏幕左上角的偏移位置
103     # fm_main.geometry('586x492')
104     fm_main.geometry('%dx%d+%d+%d' % (width, height, left, top))
105     fm_main.resizable(0, 0)  # 设置窗口大小不可变
106 
107     lb0 = tk.Label(fm_main, text="请选择需要文字识别的图片文件夹:")
108     lb0.grid(row=5, column=0, sticky=tk.W)
109     en0 = tk.Entry(fm_main)
110     en0.grid(row=5, column=1, sticky=tk.N + tk.E + tk.W)
111 
112     b0 = tk.Button(fm_main, text='...', command=select_s)
113     b0.grid(row=5, column=2, sticky=tk.N + tk.E + tk.W)
114 
115     b1 = tk.Button(fm_main, text='文件夹多图片文字识别', command=show_mpcharacter)
116     b1.grid(row=6, column=0, sticky=tk.N + tk.E + tk.W)
117 
118     b2 = tk.Button(fm_main, text='截屏图片文字识别', command=show_character)
119     b2.grid(row=6, column=1, sticky=tk.N + tk.E + tk.W)
120 
121     b3 = tk.Button(fm_main, text='保存文本', command=save)
122     b3.grid(row=8, column=0, sticky=tk.N + tk.E + tk.W)
123 
124     # columnspan=2,表示t1占用0,1二列
125     tex_character = tk.Text(fm_main)
126     tex_character.grid(row=7, column=0, columnspan=2, sticky=tk.N + tk.E + tk.W)
127 
128     # 创建滚动条
129     scroll = tk.Scrollbar(orient="vertical", command=tex_character.yview)
130 
131     # 将滚动条填充
132     tex_character.config(yscrollcommand=scroll.set)
133     scroll.grid(row=7, column=2, sticky=tk.S + tk.W + tk.E + tk.N)
134 
135     # 将滚动条与文本框关联
136     scroll['command'] = tex_character.yview
137     # scroll.config(command=t1.yview)
138     # 将滚动条填充
139     tex_character.config(yscrollcommand=scroll.set)
140 
141     b3 = tk.Button(fm_main, text='退出', command=exit_sys)
142     b3.grid(row=8, column=1, sticky=tk.N + tk.E + tk.W)
143 
144     fm_main.mainloop()

 

    三、对识别出来的文本文件进行处理。
 1 import re
 2 import time
 3 import os
 4 
 5 # 获取桌面路径
 6 path_three = os.path.join(os.path.expanduser("~"), 'Desktop')
 7 # 获取当前日期字符串
 8 time_now = time.strftime("%Y%m%d", time.localtime())
 9 
10 # 打开桌面待处理文本文件。
11 # f = open(f'{path_three}/系统规划与管理师/001、信息系统综合知识.txt', 'r')
12 path_one = f'{path_three}/系统规划与管理师/'
13 # print(os.listdir(path_one))
14 for i in os.listdir(path_one):
15     f = open(path_one + i, 'r')
16     p = f.readlines()
17     for s in p:
18         s.strip()
19     # 用join()将列表p转换为字符串all_words
20     all_words = ''.join(p)
21     # 获取题目
22     question = re.findall('\d{1,3}、[\s\S]+?(?=解析:)', all_words)
23     # print(question)
24     for s in range(len(question)):
25         question[s] = question[s] + '\n'
26 
27     word_one = ''.join(question)
28     # 获取解析
29     # answer = re.findall('解析:[\s\S]+?(?=\d{1,3}、)', all_words)
30     answer = re.findall('解析:[\s\S]+?(?=\d{1,3}、|$)', all_words)
31     # print(answer)
32     # for s in answer:
33     #     s.strip()
34     for j in range(1, len(answer) + 1):
35         answer[j - 1] = f'{j}{answer[j - 1]}'
36     word_two = ''.join(answer)
37     print(word_one)
38     # print(word_two)
39     f.close()
40     f1 = open(f'{path_three}/系统规划与管理师(题目及答案)/{i}', 'w')
41     f1.write(word_one)
42     f1.close()
43     # 截取文件名称
44     k=i.split('.')
45     f2 = open(f'{path_three}/系统规划与管理师(题目及答案)/{k[0]}(答案).txt', 'w')
46     f2.write(f'{k[0]}(答案)\n{word_two}')
47     f2.close()

 



这篇关于005、用python整理资料的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程