Configuration requirements
1.ImageMagick
2.tesseract-OCR
3.Python3.7
4.from PIL import Image as PI
5.import io
6.import os
7.import pyocr.builders
8.from cnocr import CnOcr
import The data is converted into a digital format. Based on this, we need to first complete the conversion of uppercase Chinese characters and numbers.
def chineseNumber2Int(strNum: str): result = 0 temp = 1 # 存放一个单位的数字如:十万 count = 0 # 判断是否有chArr cnArr = ['壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] chArr = ['拾', '佰', '仟', '万', '亿'] for i in range(len(strNum)): b = True c = strNum[i] for j in range(len(cnArr)): if c == cnArr[j]: if count != 0: result += temp count = 0 temp = j + 1 b = False break if b: for j in range(len(chArr)): if c == chArr[j]: if j == 0: temp *= 10 elif j == 1: temp *= 100 elif j == 2: temp *= 1000 elif j == 3: temp *= 10000 elif j == 4: temp *= 100000000 count += 1 if i == len(strNum) - 1: result += temp return result
The above code can be used to convert uppercase letters and numbers. For example, input "Twenty thousand yuan" to export "200000", and then convert it into numbers to greatly simplify the table. Operations can also be beneficial to data archiving while completing table operations.
As shown in the picture, the small black dot is where the mouse is, and the lower left corner of the drawing software is its coordinates.
Extract the issue date
def text1(new_img): #提取出票日期 left = 80 top = 143 right = 162 bottom = 162 image_text1 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text1.show() txt1 = tool.image_to_string(image_text1) print(txt1) return str(txt1)
Withdraw the amount
def text2(new_img): #提取金额 left = 224 top = 355 right = 585 bottom = 380 image_text2 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text2.show() image_text2.save("img/tmp.png") temp = ocr.ocr("img/tmp.png") temp="".join(temp[0]) txt2=chineseNumber2Int(temp) print(txt2) return txt2Extract the biller
def text3(new_img):
#提取出票人
left = 177
top = 207
right = 506
bottom = 231
image_text3 = new_img.crop((left, top, right, bottom))
#展示图片
#image_text3.show()
image_text3.save("img/tmp.png")
temp = ocr.ocr("img/tmp.png")
txt3="".join(temp[0])
print(txt3)
return txt3
Extract the payment bankdef text4(new_img):
#提取付款行
left = 177
top = 274
right = 492
bottom = 311
image_text4 = new_img.crop((left, top, right, bottom))
#展示图片
#image_text4.show()
image_text4.save("img/tmp.png")
temp = ocr.ocr("img/tmp.png")
txt4="".join(temp[0])
print(txt4)
return txt4
Extract the bill of exchange arrival datedef text5(new_img):
#提取汇票到日期
left = 92
top = 166
right = 176
bottom = 184
image_text5 = new_img.crop((left, top, right, bottom))
#展示图片
#image_text5.show()
txt5 = tool.image_to_string(image_text5)
print(txt5)
return txt5
Extract the bill documentdef text6(new_img):
#提取票据号码
left = 598
top = 166
right = 870
bottom = 182
image_text6 = new_img.crop((left, top, right, bottom))
#展示图片
#image_text6.show()
txt6 = tool.image_to_string(image_text6)
print(txt6)
return txt6
After all the data is extracted, we enter the setting process. We need to extract all the bill files first , get their file names and paths. ocr=CnOcr()
tool = pyocr.get_available_tools()[0]
filePath='img'
img_name=[]
for i,j,name in os.walk(filePath):
img_name=name
After obtaining the complete data, you can import the data into Excel. count=1
book = xlwt.Workbook(encoding='utf-8',style_compression=0)
sheet = book.add_sheet('test',cell_overwrite_ok=True)
for i in img_name:
img_url = filePath+"/"+i
with open(img_url, 'rb') as f:
a = f.read()
new_img = PI.open(io.BytesIO(a))
## 写入csv
col = ('年份','出票日期','金额','出票人','付款行全称','汇票到日期','备注')
for j in range(0,7):
sheet.write(0,j,col[j])
book.save('1.csv')
shijian=text1(new_img)
sheet.write(count,0,shijian[0:4])
sheet.write(count,1,shijian[5:])
sheet.write(count,2,text2(new_img))
sheet.write(count,3,text3(new_img))
sheet.write(count,4,text4(new_img))
sheet.write(count,5,text5(new_img))
sheet.write(count,6,text6(new_img))
count = count + 1
At this point, the complete process is over. Attached are all source codesfrom wand.image import Image from PIL import Image as PI import pyocr import io import re import os import shutil import pyocr.builders from cnocr import CnOcr import requests import xlrd import xlwt from openpyxl import load_workbook def chineseNumber2Int(strNum: str): result = 0 temp = 1 # 存放一个单位的数字如:十万 count = 0 # 判断是否有chArr cnArr = ['壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'] chArr = ['拾', '佰', '仟', '万', '亿'] for i in range(len(strNum)): b = True c = strNum[i] for j in range(len(cnArr)): if c == cnArr[j]: if count != 0: result += temp count = 0 temp = j + 1 b = False break if b: for j in range(len(chArr)): if c == chArr[j]: if j == 0: temp *= 10 elif j == 1: temp *= 100 elif j == 2: temp *= 1000 elif j == 3: temp *= 10000 elif j == 4: temp *= 100000000 count += 1 if i == len(strNum) - 1: result += temp return result def text1(new_img): #提取出票日期 left = 80 top = 143 right = 162 bottom = 162 image_text1 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text1.show() txt1 = tool.image_to_string(image_text1) print(txt1) return str(txt1) def text2(new_img): #提取金额 left = 224 top = 355 right = 585 bottom = 380 image_text2 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text2.show() image_text2.save("img/tmp.png") temp = ocr.ocr("img/tmp.png") temp="".join(temp[0]) txt2=chineseNumber2Int(temp) print(txt2) return txt2 def text3(new_img): #提取出票人 left = 177 top = 207 right = 506 bottom = 231 image_text3 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text3.show() image_text3.save("img/tmp.png") temp = ocr.ocr("img/tmp.png") txt3="".join(temp[0]) print(txt3) return txt3 def text4(new_img): #提取付款行 left = 177 top = 274 right = 492 bottom = 311 image_text4 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text4.show() image_text4.save("img/tmp.png") temp = ocr.ocr("img/tmp.png") txt4="".join(temp[0]) print(txt4) return txt4 def text5(new_img): #提取汇票到日期 left = 92 top = 166 right = 176 bottom = 184 image_text5 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text5.show() txt5 = tool.image_to_string(image_text5) print(txt5) return txt5 def text6(new_img): #提取票据号码 left = 598 top = 166 right = 870 bottom = 182 image_text6 = new_img.crop((left, top, right, bottom)) #展示图片 #image_text6.show() txt6 = tool.image_to_string(image_text6) print(txt6) return txt6 ocr=CnOcr() tool = pyocr.get_available_tools()[0] filePath='img' img_name=[] for i,j,name in os.walk(filePath): img_name=name count=1 book = xlwt.Workbook(encoding='utf-8',style_compression=0) sheet = book.add_sheet('test',cell_overwrite_ok=True) for i in img_name: img_url = filePath+"/"+i with open(img_url, 'rb') as f: a = f.read() new_img = PI.open(io.BytesIO(a)) ## 写入csv col = ('年份','出票日期','金额','出票人','付款行全称','汇票到日期','备注') for j in range(0,7): sheet.write(0,j,col[j]) book.save('1.csv') shijian=text1(new_img) sheet.write(count,0,shijian[0:4]) sheet.write(count,1,shijian[5:]) sheet.write(count,2,text2(new_img)) sheet.write(count,3,text3(new_img)) sheet.write(count,4,text4(new_img)) sheet.write(count,5,text5(new_img)) sheet.write(count,6,text6(new_img)) count = count + 1
The above is the detailed content of How to implement batch data extraction through Python. For more information, please follow other related articles on the PHP Chinese website!

TomergelistsinPython,youcanusethe operator,extendmethod,listcomprehension,oritertools.chain,eachwithspecificadvantages:1)The operatorissimplebutlessefficientforlargelists;2)extendismemory-efficientbutmodifiestheoriginallist;3)listcomprehensionoffersf

In Python 3, two lists can be connected through a variety of methods: 1) Use operator, which is suitable for small lists, but is inefficient for large lists; 2) Use extend method, which is suitable for large lists, with high memory efficiency, but will modify the original list; 3) Use * operator, which is suitable for merging multiple lists, without modifying the original list; 4) Use itertools.chain, which is suitable for large data sets, with high memory efficiency.

Using the join() method is the most efficient way to connect strings from lists in Python. 1) Use the join() method to be efficient and easy to read. 2) The cycle uses operators inefficiently for large lists. 3) The combination of list comprehension and join() is suitable for scenarios that require conversion. 4) The reduce() method is suitable for other types of reductions, but is inefficient for string concatenation. The complete sentence ends.

PythonexecutionistheprocessoftransformingPythoncodeintoexecutableinstructions.1)Theinterpreterreadsthecode,convertingitintobytecode,whichthePythonVirtualMachine(PVM)executes.2)TheGlobalInterpreterLock(GIL)managesthreadexecution,potentiallylimitingmul

Key features of Python include: 1. The syntax is concise and easy to understand, suitable for beginners; 2. Dynamic type system, improving development speed; 3. Rich standard library, supporting multiple tasks; 4. Strong community and ecosystem, providing extensive support; 5. Interpretation, suitable for scripting and rapid prototyping; 6. Multi-paradigm support, suitable for various programming styles.

Python is an interpreted language, but it also includes the compilation process. 1) Python code is first compiled into bytecode. 2) Bytecode is interpreted and executed by Python virtual machine. 3) This hybrid mechanism makes Python both flexible and efficient, but not as fast as a fully compiled language.

Useaforloopwheniteratingoverasequenceorforaspecificnumberoftimes;useawhileloopwhencontinuinguntilaconditionismet.Forloopsareidealforknownsequences,whilewhileloopssuitsituationswithundeterminediterations.

Pythonloopscanleadtoerrorslikeinfiniteloops,modifyinglistsduringiteration,off-by-oneerrors,zero-indexingissues,andnestedloopinefficiencies.Toavoidthese:1)Use'i


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 English version
Recommended: Win version, supports code prompts!

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.
