书接上回的需求:
提供一个Excel文件,里面包含统一社会信用代码与公司名称的信息,把识别出的统一社会信用代码匹配到公司名称,再用公司名称重命名PDF。
这里有读者可能会问:那为什么不直接对企业名称进行识别呢?
这是因为OCR目前对汉字的识别率远低于数字与字母,而且采用正则的方法很难使用长度(统一社会信用代码都是18位)这个特征匹配字段,经常匹配到一些奇奇怪怪的东西,当然如果正则表达式使用的特别好的人可以忽略这点。
一、思路
使用字典让统一社会信用代码作为key,企业名称作为value,形成一一对应的关系,通过读取pdf名称(此时是信用代码),在字典中查找到其对应的企业名称即可。
读取两列存为字典格式:
二、代码
import os
import pandas as pd
import shutil
EXCEL_PATH = r'' # Excel的路径
ROOT_DIR = r'' # 需要更改的目录
NEW_PATH = r'' # 保存的目录
PATH_LIST = []
data = pd.read_excel(EXCEL_PATH)
dict1 = dict(zip(data['统一社会信用代码'], data['企业名称'])) # 压缩成字典,代码对应企业名称
for dir_name in os.listdir(ROOT_DIR): # 获取第一层目录下的目录名
PATH_LIST.append(dir_name) # 将目录下的文件名保存为列表形式
dir_first = os.path.join(ROOT_DIR, dir_name) # 把第一层目录 + 第二层目录进行拼接,目录下就是pdf文件了
for file in os.listdir(dir_first): # 获取目录下的文件名+后缀
file_name, end = os.path.splitext(file) # 获取文件名,后缀
try:
Chinese_name = dict1[file_name] # 在字典中查询到企业中文名
OLD_path = f'{dir_first}/{file}' # 原来pdf的路径
shutil.move(OLD_path,f'./finished/{Chinese_name}.pdf')
except:
continue
代码并不难写,注释写的也比较详细,核心就是用zip方法直接将DataFrame格式的两列数据存为字典格式。
最后加上try:抛出异常,这样遇到识别错误的信用代码就不会报错,否则遇到识别错误的情况会很麻烦。
欢迎指正!