先找到PaddleOCR检测和识别后的结果文件(Label.txt),还有一份正确无误的身份证照片名字和身份证号码对应的文档(rec_shangye.txt),还有替换后的正确的结果文件(Label2.txt)
import re
label_path = "./Label.txt" # paddleocr的已标好的label路径
new_label_path = "./Label2.txt" # paddleocr的替换后的新的label路径
rec_path = "./rec_shangye.txt" # paddleocr的正确结果文件的路径
rec_list = [] # 创建保存rec_shangye.txt中每行文本内容的列表
with open(rec_path, "r") as r_file2:
for r2 in r_file2:
# print(r2) # 标准号码参考表的每一行文本信息
r2_content = r2.split("\t") # 把每一行内容用\t切分开,变成两个元素
rec_list.append(r2_content) # 把这两个元素一起保存在列表中保存在列表中
# print(rec_list) # [['0_0714.jpg', '622960866786784911\n'], ['1_0714.jpg', '6226822014401336344\n'], ...]
name_list = [] # 照片名字列表
number_list = [] # 身份证号码列表
for rec in rec_list:
# print(rec) # 打印显示每一个遍历的元素
name = rec[0] # 元素的第一个是照片名字
number = rec[1].replace("\n", "") # 元素的第二个去掉\n后是身份证号码
name_list.append(name) # 把照片名字添加到照片名字列表中
number_list.append(number) # 把身份证号码添加到身份证号码列表中
# print(name_list) # 显示照片名字列表 ['0_0714.jpg', '1_0714.jpg', ...]
# print(number_list) # 显示身份证号码列表 ['622960866786784911', '6226822014401336344', ...]
new_dict = {} # 创建新的字典
for i, na in enumerate(name_list):
for j, num in enumerate(number_list):
if i == j: # 当照片名字和身份证号码的索引一致,把这一对值用键值对匹配的方式存到字典中
new_dict[na] = num
print(new_dict) # 把每一组数据用键值对存到字典中
for i, v in enumerate(new_dict):
print(i, v) # 索引和键:0 0_0714.jpg 1 1_0714.jpg
with open(label_path, "r") as r_file:
r_contents = r_file.readlines() # 把Label.txt中的所有文本内容存入列表
print(r_contents) # 显示列表的内容
# 法一:全部写入writelines()
# with open(new_label_path, "w+") as w_file:
# for r in r_contents:
# print(r)
# id_name = r.split("\t")[0].split("/")[1] # 身份证照片名字
# id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
# print("old_id_number: ", id_number) # 显示旧的身份证号码
# for i, v in enumerate(new_dict): # 遍历身份证照片和身份证号码匹配的字典
# if id_name == v: # 身份证照片名字对应
# new_id_number = new_dict[v] # 取出字典的这张照片对应的值(身份证号码)并赋值给变量new_id_number
# print("new_id_number: ", new_id_number) # 显示新的身份证号码
# a = re.sub(id_number, new_id_number, r)
# w_file.writelines(a)
# 法二:一行一行单独写入write()
with open(label_path, "r") as r_file:
with open(new_label_path, "w") as w_file:
for r in r_file:
# print(r) # Label.txt中的每一个元素
r_content = r.split("\t")
id_name = r_content[0].split("/")[1] # 照片名字
id_number = r_content[1].split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
# id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
print("--------------------------------------")
print("old_id_number: ", id_number) # 打印旧的身份证号码
for i, v in enumerate(new_dict): # 遍历身份证照片和身份证号码匹配的字典
if id_name == v: # 文件中的身份证照片名字和new_dict字典中的名字对应
new_id_number = new_dict[v] # 取出字典中对应的字典的值
print("new_id_number: ", new_id_number) # 打印新的身份证号码
a = re.sub(id_number, new_id_number, r) # 把旧的号码替换成新的号码
w_file.write(a) # 把替换后的结果写入Label2.txt文件中,则真实的txt文件中也完成了替换
import re
label_path = "./Label.txt" # paddleocr的已标好的label路径
new_label_path = "./Label2.txt" # paddleocr的替换后的新的label路径
rec_path = "./rec_shangye.txt" # paddleocr的正确结果文件的路径
rec_list = [] # 创建保存rec_shangye.txt中每行文本内容的列表
with open(rec_path, "r") as r_file2:
for r2 in r_file2:
# print(r2) # 标准号码参考表的每一行文本信息
r2_content = r2.split("\t") # 把每一行内容用\t切分开,变成两个元素
rec_list.append(r2_content) # 把这两个元素一起保存在列表中保存在列表中
# print(rec_list) # [['0_0714.jpg', '622960866786784911\n'], ['1_0714.jpg', '6226822014401336344\n'], ...]
name_list = [] # 照片名字列表
number_list = [] # 身份证号码列表
for rec in rec_list:
# print(rec) # 打印显示每一个遍历的元素
name = rec[0] # 元素的第一个是照片名字
number = rec[1].replace("\n", "") # 元素的第二个去掉\n后是身份证号码
name_list.append(name) # 把照片名字添加到照片名字列表中
number_list.append(number) # 把身份证号码添加到身份证号码列表中
# print(name_list) # 显示照片名字列表 ['0_0714.jpg', '1_0714.jpg', ...]
# print(number_list) # 显示身份证号码列表 ['622960866786784911', '6226822014401336344', ...]
new_dict = {} # 创建新的字典
for i, na in enumerate(name_list):
for j, num in enumerate(number_list):
if i == j: # 当照片名字和身份证号码的索引一致,把这一对值用键值对匹配的方式存到字典中
new_dict[na] = num
print(new_dict) # 把每一组数据用键值对存到字典中
for i, v in enumerate(new_dict):
print(i, v) # 索引和键:0 0_0714.jpg 1 1_0714.jpg
with open(label_path, "r") as r_file:
r_contents = r_file.readlines() # 把Label.txt中的所有文本内容存入列表
print(r_contents) # 显示列表的内容
# 法一:
# with open(new_label_path, "w+") as w_file:
# for r in r_contents:
# print(r)
# id_name = r.split("\t")[0].split("/")[1] # 身份证照片名字
# id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
# print("old_id_number: ", id_number) # 显示旧的身份证号码
# for i, v in enumerate(new_dict): # 遍历身份证照片和身份证号码匹配的字典
# if id_name == v: # 身份证照片名字对应
# new_id_number = new_dict[v] # 取出字典的这张照片对应的值(身份证号码)并赋值给变量new_id_number
# print("new_id_number: ", new_id_number) # 显示新的身份证号码
# a = re.sub(id_number, new_id_number, r)
# w_file.writelines(a)
# 法二:
with open(label_path, "r") as r_file:
with open(new_label_path, "w") as w_file:
for r in r_file:
# print(r) # Label.txt中的每一个元素
r_content = r.split("\t")
id_name = r_content[0].split("/")[1] # 照片名字
id_number = r_content[1].split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
# id_number = r.split(":")[1].split(",")[0].replace('"', '').replace(' ', '') # 去掉""和空格后的身份证号码
print("--------------------------------------")
print("old_id_number: ", id_number) # 打印旧的身份证号码
for i, v in enumerate(new_dict): # 遍历身份证照片和身份证号码匹配的字典
if id_name == v: # 文件中的身份证照片名字和new_dict字典中的名字对应
new_id_number = new_dict[v] # 取出字典中对应的字典的值
print("new_id_number: ", new_id_number) # 打印新的身份证号码
a = re.sub(id_number, new_id_number, r) # 把旧的号码替换成新的号码
w_file.write(a) # 把替换后的结果写入Label2.txt文件中,则真实的txt文件中也完成了替换
感谢大家的关注和支持
希望我写的文章能够让你们得到价值有所收获
一直在路上,还请各位多多指正!